前言
在实际的应用中,一台服务器往往有好几个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为它的一个竞价域名。