域名解析

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设置为定义在中的下列常值之一:

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

你可能感兴趣的:(域名解析,网络编程)