• C

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.

Who is Participating?
sunnycoderConnect With a Mentor Commented:

go though it .. by the time you finish it, you would no longer feel like a beginner ;o)
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?

A proven path to a career in data science

At Springboard, we know how to get you a job in data science. With Springboard’s Data Science Career Track, you’ll master data science  with a curriculum built by industry experts. You’ll work on real projects, and get 1-on-1 mentorship from a data scientist.

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
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;


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
vasureddymAuthor Commented:
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..
vasureddymAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.