This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

hot to get IP from shell -> C solution

/* little utility to get the IP address of the machine

- prints the IP address in triple-dotted form xxx.yyy.zzz.www,

or nothing if can't get it.

- this code is a fragment from EpidEm code.


#include <stdio.h>

#include <arpa/inet.h>

#include <netinet/in.h>

#include <unistd.h>

#include <netdb.h>


Returns the IP address of this host.

- if host have more than 1 IP, only 1 (the first) is returned.

- return is in network byte order

- thanks to Doct. Ghini (

return: 0 if unsuccessful, the IP otherwise


in_addr_t get_my_IP()


/* have you ever seen a hostname longer than a screen (80cols)?*/

char name[80]; /*store my hostname*/

struct hostent * hostent_ptr;

int ret;

ret = gethostname (name, 80);

if(ret == -1) {

/*printf ("ERROR gethostname() failed, Errno=%d \nDescription: %s\n", errno,


return 0;


hostent_ptr = gethostbyname(name);

if(hostent_ptr == NULL)


/*printf ("ERROR gethostbyname() failed, h_errno=%d \nDescription: %s\n",
h_errno, hstrerror(h_errno));*/

return 0;


/*h_addr_list contains IPs of this host in network byte order */

return ((struct in_addr *)hostent_ptr->h_addr_list[0])->s_addr; /*get the
first IP.*/


int main()


in_addr_t my_ip = get_my_IP();

if (my_ip != 0)


struct in_addr temp;

temp.s_addr = my_ip;

printf("%s\n", inet_ntoa(temp));


return 0;


Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]