本文共 1601 字,大约阅读时间需要 5 分钟。
怎样用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请求并保存应答信息):
#include#include #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;}
当网络是好的, 且dns配置正确, 那么结果为:
web server ip is : 180.97.33.108
看到没, 其实我们啥也没做, gethostbyname会触发dns请求, 并把dns服务器返回的ip信息保存在pHost中。 当然啦, 如果你把网络关了, 那么pHost变为NULL. 好了, 本篇简单的文章就介绍到此。
转载地址:http://fygvi.baihongyu.com/