18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > 域名系统gethostbyname函数&gethostbyaddr函数

域名系统gethostbyname函数&gethostbyaddr函数

时间:2023-02-24 14:36:01 | 来源:建站知识

时间:2023-02-24 14:36:01 来源:建站知识

域名系统gethostbyname函数&gethostbyaddr函数:查找主机名最基本的函数是gethostbyname(),如果调用成功,就返回一个指向hostent结构的指针,该结构中含有所查寻主机的所有IPv4地址。getaddrinfo()函数能够同时处理IPv4地址和IPv6地址。

函数原型:

#include <netdb.h>extern int h_errno;struct hostent *gethostbyname(const char *name);struct hostent { char *h_name; /* 查询主机的规范名字 */ char **h_aliases; /* 别名 */ int h_addrtype; /* AF_INET */ int h_length; /* 4 */ char **h_addr_list; /* IPv4地址 */ }当发生错误时,它不设置errno变量,而是设置全局变量h_errnohstrerror()函数以h_errno为参数,返回一个const char*指针,指向相应错误的说明。

下面的程序,它为任意数目的命令行参数调用gethostbyname(),并显示返回的所有信息。

运行结果如下图。

#include "unp.h"intmain(int argc, char **argv){ char *ptr, **pptr; char str[INET_ADDRSTRLEN]; struct hostent *hptr; while (--argc > 0) { ptr = *++argv; if ( (hptr = gethostbyname(ptr)) == NULL) { err_msg("gethostbyname error for host: %s: %s", ptr, hstrerror(h_errno)); continue; } printf("official hostname: %s/n", hptr->h_name); for (pptr = hptr->h_aliases; *pptr != NULL; pptr++) printf("/talias: %s/n", *pptr); switch (hptr->h_addrtype) { case AF_INET: pptr = hptr->h_addr_list; for ( ; *pptr != NULL; pptr++) printf("/taddress: %s/n", Inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str))); break; default: err_ret("unknown address type"); break; } } exit(0);}
gethostbyaddr()函数试图由一个二进制的IP地址找到相应的主机名,与gethostbyname()相反,函数原型如下。

#include <netdb.h>#include <sys/socket.h>extern int h_errno;//struct hostent *gethostbyname(const char *name);struct hostent *gethostbyaddr(const void *addr,socklen_t len, int type);gethostbyaddr()返回也是一个指向hostent结构的指针,gethostbyaddr()in_addr.arpa域中向一个名字服务器查询PTR记录。

参考文献:《UNIX网络编程 卷1:套接字联网API》

关键词:函数,系统

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭