域名解析

linux 域名解析的原理:

1、 查找本地中的配置文件

配置文件/etc/hosts

域名服务器地址文件:/etc/resolv.conf文件

2. 通过发送DNS解析请求给DNS服务器,返回应答

相关结构为:

struct hostent {

      char *h_name;     //主机名

      char **h_aliases; //别名

      int h_addrtype;   //host address type

      int h_length;           //地址长度

      char **h_addr_list; //ipv4地址

}; 

相关函数:

gethostbyname

注意点:当错误发生时,不设置errno变量,而是将全局整数变量h_errno设置为定义在<netdb.h>中的下列常值之一:

HOST_NOT_FOUND;

TRY_AGAIN;

NO_RECOVERY;

NO_DATA(eqNO_ADDRESS)


gethostbyaddr:

与gethostbyname相反,由二进制的IP地址找到对应的主机名。

 

获取主机上的服务名:

getservbyname

getservbyport

注意点:得到的主机地址和端口号为网络字节序,需要转换为主机字节序。

 

getaddrinfo    //适用于ipv6和ipv4, 其用于替代gethostbyname及getservbyname

获取的地址结构为struct addrinfo

注意点:getaddrinfo获取的空间是动态获取的,这些存储空间通过调用freeaddrinfo返还给系统。

gai_strerror可以获取由getaddrinfo的返回值的名字和含义。

 

获取服务;

struct addrinfo*host_serv

getaddrinfo的互补函数:getnameinfo

 

编程中推荐使用可重入函数:

gethostbyname_r

gethostbyaddr_r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值