Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get ip address from sock structure in c?

I'm writing simple server/client and trying to get client IP address and save it on server side to decide which client should get into critical section. I googled it several times but couldn't find proper way to get IP address from sock structure.

I believe this is a way to get IP from sock struct after server accept request from client. More specifically in c after server execute

csock = accept(ssock, (struct sockaddr *)&client_addr, &clen)  

Thanks

like image 469
REALFREE Avatar asked Jun 17 '10 10:06

REALFREE


People also ask

How do I find client IP address in socket programming?

OK assuming you are using IPV4 then do the following: struct sockaddr_in* pV4Addr = (struct sockaddr_in*)&client_addr; struct in_addr ipAddr = pV4Addr->sin_addr; If you then want the ip address as a string then do the following: char str[INET_ADDRSTRLEN]; inet_ntop( AF_INET, &ipAddr, str, INET_ADDRSTRLEN );


1 Answers

OK assuming you are using IPV4 then do the following:

struct sockaddr_in* pV4Addr = (struct sockaddr_in*)&client_addr; struct in_addr ipAddr = pV4Addr->sin_addr; 

If you then want the ip address as a string then do the following:

char str[INET_ADDRSTRLEN]; inet_ntop( AF_INET, &ipAddr, str, INET_ADDRSTRLEN ); 

IPV6 is pretty easy as well ...

struct sockaddr_in6* pV6Addr = (struct sockaddr_in6*)&client_addr; struct in6_addr ipAddr       = pV6Addr->sin6_addr; 

and getting a string is almost identical to IPV4

char str[INET6_ADDRSTRLEN]; inet_ntop( AF_INET6, &ipAddr, str, INET6_ADDRSTRLEN ); 
like image 199
Goz Avatar answered Sep 21 '22 23:09

Goz