如何用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请求并保存应答信息):

 

#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.  好了, 本篇简单的文章就介绍到此。

 

      

 


 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值