#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netdb.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
int main(int argc,char *argv[])
{
struct hostent *h;
if(argc!=2)
{/*检查命令行*/
fprintf(stderr,"usage:getipaddress");
exit(1);
}
if((h=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname\n");
exit(2);
}
printf("hostname is %s\n",h->h_name);
printf("ip changed %s\n",inet_ntoa( *((struct in_addr*)h->h_addr) ) );
return 0;
}
需要使用的结构体
struct in_addr {
__be32 s_addr;
}; //ip地址
struct hostent *gethostbyname(const char *name);
//这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。
//传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。
//所在头文件<sys/socket.h>
struct hostent{
char * h_name;
char ** h_aliases;
short h_addrtype;
short h_length;
char ** h_addr_list;
}; //主机信息
#define h_addr h_addr_list[0]
char *inet_ntoa (struct in_addr);
//返回点分十进制的字符串在静态内存中的指针。
//所在头文件:<arpa/inet.h>