#include<stdio.h>
#include<netdb.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main(int argc,char **argv)
{
char **pptr;
char str[46];
struct hostent *hptr;
if(argc < 2)
{
fprintf(stderr,"usage:domain <domain>\n");
return -1;
}
if((hptr = gethostbyname(argv[1])) == NULL)
{
fprintf(stderr,"gethostbyname call failed.%s\n",hstrerror(h_errno));
return -1;
}
printf("offical name: %s\n",hptr->h_name);
for(pptr = hptr->h_aliases;*pptr != NULL;pptr++)
{
fprintf(stderr,"Invalid address type %d\n",hptr->h_addrtype);
return -1;
}
pptr = hptr->h_addr_list;
for(;*pptr != NULL;pptr++)
{
printf("\t address:%s\n", inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str)));
}
return 0;
}
域名解析程序
#include<netdb.h>
struct hostent
{
char *h_name;//主机名
char *h_aliases;//主机的别名列表
int h_addrtype;//主机地址族的类型,AF_INET或AF_INET6
int h_length; //返回地址的长度,如果返回的是IPv4地址,这个长度是4。
char **h_addr_list;//返回主机的地址列表,以网络字节序存储。
};
#define h_addr h_addr_list[0]
struct hostent *gethostbyname(const char *hostname);
/*根据/etc/resolv.conf或/etc/hosts,参数hostname是一个包含主机域名的字符串(www.google.cn)或包含IPv4地址的字符串(“192.168.2.1”)成功执行将返回非空的hostent结构地址,失败则返回空指针,并用错误码设置全局变量h_errno,可以通过调用hstrerror()并传递h_errno作为参数取得错误描述信息。*/
extern int h_errno;
char *hstrerror(int err);