网络编程——域名解析

我们通常在网页上访问一个网址,例如访问百度时,我们通常是输入www.baidu.com,这种表示是代表百度的域名,实际上当我们在访问这个网址的时候,操作系统会自动向DNS服务器发送请求,来获取百度的ip,完成域名到ip的转换。
在计算机网络中,通常我们我们在访问一个网址时,输入的是该网址的域名,而不是ip,因为像百度这种网址的ip通常是公有ip,这种ip是会变的,我们当然不会去记它会变的ip,而通过访问域名的方法来访问百度就会更方便,因为域名是不会变的。

所以c提供了一个域名转换ip的函数gethostbyname()。

struct hostent
{
char *h_name; // 主机规范名
char **h_aliases; // 主机别名
int h_addrtype; // Ipv4 or ipv6
int h_length; // ip长度
char **h_addr_list; // ip 二进制表达
#define h_addr h_addr_list[0]
};

可以看到ip在结构体中是以二进制表示的,而我们需要的是点分十进制数。

char *ip;
ip = inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

这个函数第一个参数是ip的类型
第二个参数是hostent结构体成员h_addr_list
注意这个成员是一个二重指针,代表一个存放很多字符串的数组,因为一个域名有很多个公网ip,所以用二重指针,所以用参数的时候要注意。

for(; *pptr !=NULL;pptr++)
	ipv4 = inet_ntop(AF_INET , *pptr , buf , 16);

第三个参数是一个存储buf
第四个参数buf的长度;

上述就可以实现域名解析啦

猜你喜欢

转载自blog.csdn.net/qq_40215005/article/details/88758794