1. 程式人生 > >模擬DNS查詢域名的IP地址

模擬DNS查詢域名的IP地址

一直搞不明白,通過域名訪問網頁的時候計算機是在什麼時候進行域名的解析,最近通過閱讀《網路是怎樣連線的》得到了答案,

下面就是我的簡單理解和實驗,僅供參考:

瀏覽器在根據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;
}