如何用C程式獲取www.baidu.com的ip地址?---實際是請求dns server解析
怎樣用C程式獲取www.baidu.com的ip地址呢? 實際上, 這個問題我們之前間接討論過, 今天我們繼續來說一下。
當然啦, 你得配dns地址, 也就是要指定dns伺服器, 否則, 怎麼能解析www.baidu.com呢? 當然了, 你可以直接ping www.baidu.com獲取, 結果如下:
C:\Documents and Settings\Administrator>ping www.baidu.com
Pinging www.a.shifen.com [180.97.33.107] with 32 bytes of data:
Reply from 180.97.33.107: bytes=32 time=41ms TTL=53
Reply from 180.97.33.107: bytes=32 time=28ms TTL=53
Reply from 180.97.33.107: bytes=32 time=32ms TTL=52
Reply from 180.97.33.107: bytes=32 time=31ms TTL=52
Ping statistics for 180.97.33.107:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 28ms, Maximum = 41ms, Average = 33ms
當然啦, 你也可以用nslookup www.baidu.com, 結果如下:
C:\Documents and Settings\Administrator>nslookup www.baidu.com
Server: dnspai-public-dns.dnspai.com
Address: 101.226.4.6
Non-authoritative answer:
Name: www.a.shifen.com
Addresses: 180.97.33.108, 180.97.33.107
Aliases: www.baidu.com
那要用程式碼, 該怎麼搞呢? 直接上碼(其實無非就是gethostbyname觸發dns請求並儲存應答資訊
當網路是好的, 且dns配置正確, 那麼結果為:#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main() { // 網路初始化 WSADATA wsaData; WSAStartup(MAKEWORD(1,1), &wsaData); // 度娘來了 char szWeb[] = "www.baidu.com"; HOSTENT *pHost = gethostbyname(szWeb); // 列印度孃的ip地址(實際上, 這個地址經常變動, 所以如果你得到的地址不一致, 那也是正常的) if(NULL != pHost) { const char* pIPAddr = inet_ntoa(*((struct in_addr *)pHost->h_addr)) ; printf("web server ip is : %s\n", pIPAddr); } return 0; }
web server ip is : 180.97.33.108
看到沒, 其實我們啥也沒做, gethostbyname會觸發dns請求, 並把dns伺服器返回的ip資訊儲存在pHost中。 當然啦, 如果你把網路關了, 那麼pHost變為NULL. 好了, 本篇簡單的文章就介紹到此。