模擬DNS查詢域名的IP地址
阿新 • • 發佈:2019-01-12
一直搞不明白,通過域名訪問網頁的時候計算機是在什麼時候進行域名的解析,最近通過閱讀《網路是怎樣連線的》得到了答案,
下面就是我的簡單理解和實驗,僅供參考:
瀏覽器在根據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; }