怎样用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 <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;
}
当网络是好的, 且dns配置正确, 那么结果为:
web server ip is : 180.97.33.108
看到没, 其实我们啥也没做, gethostbyname会触发dns请求, 并把dns服务器返回的ip信息保存在pHost中。 当然啦, 如果你把网络关了, 那么pHost变为NULL. 好了, 本篇简单的文章就介绍到此。