Link to home
Start Free TrialLog in
Avatar of vasureddym
vasureddym

asked on

help me in accessing LAN using C programming

Hi all!
i'm trying to access LAN using C programming.
till now i could access serial port, but i'm not sure how to acess LAN.
could someone help me in this regard!!!!

thanks in advance.

vasu
Avatar of PCT
PCT

If you what to send data through your Ethernet card you can use Sockets.
You will have to include some header probably socket.h for unix or winsock.h for windows into your code.

Don't forget to include the required libraries before compiling.


Hi vasureddym,
Depends on what you mean by "access LAN". Low-level access of network card?
Or do you want to access a particular server via SMB?
Do you want to access some TCP/IP service, like FTP?

Cheers,
Stefan
Avatar of sunnycoder
ok heres what you need to do

open a socket:


fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_ALL));
if (fd < 0) {
sprintf(ebuf, "socket: %s", strerror(errno));
goto failed;
}



/* check device type */

memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 ) {
sprintf(ebuf, "SIOCGIFHWADDR: %s", strerror(errno));
goto failed;
}

if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
sprintf(ebuf, "unsupported physical layer type 0x%x (ethernet
only)",
ifr.ifr_hwaddr.sa_family);
goto failed;
}


memcpy(ethaddr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);


if you need promisc mode, don't forget to restore device flags.


ifr.ifr_flags |= IFF_PROMISC;
if (ioctl(fd, SIOCSIFFLAGS, &ifr) < 0 ) {
sprintf(ebuf, "SIOCSIFFLAGS: %s", strerror(errno));
goto failed;
}
atexit(restore_ifr);


/****/


void restore_ifr(void)
{
int fd;


fd = socket(PF_INET, SOCK_PACKET, htons(0x0003));
if (fd < 0)
fprintf(stderr, "linux socket: %s", strerror(errno));
else if (ioctl(fd, SIOCSIFFLAGS, &saved_ifr) < 0)
fprintf(stderr, "linux SIOCSIFFLAGS: %s", strerror(errno));
}


To receive/send stuff, use recvmsg/sendmsg,
look into the concepts of the structs:
msghdr, ethhdr, iovec, and sockaddr_pkt to build/decode packages.

for more info http:20660168.html
Avatar of vasureddym

ASKER

Hi all!

Thanks PCT for your Participation.

Hi Stefan73, all I want is to learn accessing/transferring files on LAN using protocols like TCP/IP.
I tried the following simple program. It, is not making use of any protocols.
thanks for your participation.

Hi sunnycoder, i'm beginner to Network programming in C. terms like 'sockets' are new to me,. can you suggest me something..
ASKER CERTIFIED SOLUTION
Avatar of sunnycoder
sunnycoder
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
thanks sunny!
i found that link very useful!
i didn't go through it completely. right now i'm  in another project, so i have to keep this topic aside for few days.
however, it is not a good idea to keep this Question for so long time.
i want to close this for the time being.
anyways, thanks
-vasureddym