用gethostbyname进行域名转IP问题

本文介绍了如何通过C++实现根据域名获取IP地址的函数`DomainToIP`,利用`gethostbyname`函数从域名解析出IP地址,并展示了如何遍历`hostent`结构体的`h_addr_list`来获取多个IP。实例中展示了`www.baidu.com`的两个IP地址,强调了在实际应用中,服务器可能有多个IP。
摘要由CSDN通过智能技术生成

前言

在实际的应用中,一台服务器往往有好几个IP,而域名只有一个。因此,hostent 结构中的h_addr_list成员的类型设计为一个二重指针,在实际使用时,应该注意,通过下标进行访问。

代码

/*
功能:根据域名转IP
*/
#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<iostream>
#include<string>
#include<WinSock2.h>
using namespace std;
#pragma comment(lib,"WS2_32")     //链接到WS2_32.lib

//域名转IP
void DomainToIP(string &doMain)
{
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);  //不能省
	hostent * host;
	
	host = gethostbyname(doMain.c_str());
	cout << host->h_name << endl;     //www.a.shifen.com
	for (auto i = 0; host->h_addr_list[i]!=nullptr;++i)
	{//h_addr_list是一个二重指针,可以通过下标进行访问。
		cout << inet_ntoa(*(in_addr*)host->h_addr_list[i]) << endl;
	}
	WSACleanup();
}
int main()
{
	string doMain = "www.baidu.com";   //百度的域名
	DomainToIP(doMain);
	
	system("pause"); 
	return 0;

}

结果如下:
在这里插入图片描述
发现有两个IP,经过多次ping www.baidu.com,确实发现百度存在这两个IP,且是随机使用的。而www.a.shifen.com为它的一个竞价域名。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值