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
C

Avatar of undefined
Last Comment
vasureddym

8/22/2022 - Mon
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.


stefan73

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
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
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
ASKER
vasureddym

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
sunnycoder

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
ASKER
vasureddym

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