模拟DNS查询域名的IP地址

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bepthslowly/article/details/81637139

一直搞不明白,通过域名访问网页的时候计算机是在什么时候进行域名的解析,最近通过阅读《网络是怎样连接的》得到了答案,

下面就是我的简单理解和实验,仅供参考:

浏览器在根据HTTP协议生成HTTP请求消息之后,会将URL中的域名发送给你电脑上的DNS解析器(DNS客户端),调用解析器后,解析器会向 DNS 服务器发送查询消息,然后DNS服务器会返回包含IP 地址响应消息,解析器会取出 IP 地址,并将其写入浏览器指定的内存地址中。下面是用C++模拟解析器接收浏览器发过来的域名并将其解析成IP地址的过程

#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
int main()
{
    char *name;
    struct hostent *hptr;
    char str[INET_ADDRSTRLEN];
    name="www.zhangdidi.com";
    hptr = gethostbyname(name);//向DNS服务器索取域名对应IP地址
    if (hptr == NULL) {
        printf("gethostbyname error for host: %s: %s\n", name, hstrerror(h_errno));
        return -1;
    }
    printf("official: %s\n", hptr->h_name);
    //输出ip地址
    if (hptr->h_addrtype==AF_INET)
            printf("address: %s\n", inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));
        else
            printf("unknown address type\n");

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Bepthslowly/article/details/81637139