您的位置:首页 > 大数据 > 人工智能

如何用C程序获取www.baidu.com的ip地址?---实际是请求dns server解析

2015-04-27 23:03 597 查看
       怎样用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.  好了, 本篇简单的文章就介绍到此。

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: