【Linux基础】域名、主机名与IP地址转换

时间:2022-05-06 13:39:14
(1)函数说明 通常,人们在使用过程中都不愿意记忆冗长的IP地址,尤其到IPv6时,地址长度多达128位,那时就更加不可能一次次记忆那么长的IP地址了。因此,使用主机名将会是很好的选择。在Linux中,同样有一些函数可以实现主机名和地址的转化,最为常见的有gethostbyname、gethostbyaddr、getaddrinfo等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化。其中gethostbyname是将主机名转化为IP地址,gethostbyaddr则是逆操作,是将IP地址转化为主机名,另外getaddrinfo还能实现自动识别IPv4地址和IPv6地址。 gethostbyname和gethostbyaddr都涉及到一个hostent的结构体,如下所示: struct hostent{ char *h_name;/*正式主机名*/ char **h_aliases;/*主机别名*/ int h_addrtype;/*地址类型*/ int h_length;/*地址长度*/ char **h_addr_list;/*指向 IPv4 IPv6 的地址指针数组*/ } 调用该函数后就能返回hostent结构体的相关信息。 getaddrinfo函数涉及到一个addrinfo的结构体,如下所示: struct addrinfo{ int ai_flags; /*AI_PASSIVE, AI_CANONNAME;*/ int ai_family; /*地址族*/ int ai_socktype; /*socket类型*/ int ai_protocol; /*协议类型*/ size_t ai_addrlen; /*地址长度*/ char *ai_canoname; /*主机名*/ struct sockaddr *ai_addr; /*socket结构体*/ struct addrinfo *ai_next; /*下一个指针链表*/ } 相对hostent结构体而言,addrinfo结构体包含更多的信息。 (2)函数格式 gethostbyname函数语法要点如表 10‑3所示,getaddrinfo函数语法要点如表 10‑4所示。 【Linux基础】域名、主机名与IP地址转换

01.jpg (26.93 KB, 下载次数: 0)

下载附件保存到相册

2013-6-15 08:38 上传

调用该函数时可以首先对addrinfo结构体中的h_addrtype和h_length进行设置,若为IPv4可设置为AF_INET和4;若为IPv6可设置为AF_INET6和16;若不设置则默认为IPv4地址类型。 【Linux基础】域名、主机名与IP地址转换

02.jpg (39.44 KB, 下载次数: 0)

下载附件保存到相册

2013-6-15 08:38 上传

在调用之前,首先要对hints服务线索进行设置。它是一个addrinfo结构体,该结构体常见的选项值如表 10‑5所示。 【Linux基础】域名、主机名与IP地址转换本文转载于唯C教育,【Linux基础】域名、主机名与IP地址转换
http://www.weicedu.com/forum.php?mod=viewthread&tid=228&fromuid=7
(出处: http://www.weicedu.com/)