Here is a good way to determine the hostname and IP address of the local machine in C.
You first have to grab the hostname with gethostname().
char hostbuf[256]; gethostname(hostbuf,sizeof(hostbuf));
Take the hostname and use it to grab the hostent struct with gethostbyname().
struct hostent *hostentry; hostentry = gethostbyname(hostbuf);
Finally you have to take the hostent that is returned and pull out the IP address. It is in network byte order, so you have to convert it to a string with inet_ntoa().
char * ipbuf; ipbuf = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0]));
Put all this together into a working programs.
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { char hostbuf[256]; char * ipbuf; struct hostent *hostentry; int ret; ret = gethostname(hostbuf,sizeof(hostbuf)); if(-1 == ret){ perror("gethostname"); exit(1); } hostentry = gethostbyname(hostbuf); if(NULL == hostentry){ perror("gethostbyname"); exit(1); } ipbuf = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0])); if(NULL == ipbuf){ perror("inet_ntoa"); exit(1); } printf("Hostname: %s Host IP: %s\n", hostbuf, ipbuf); return 0; }