#include "stdafx.h"
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib, "Ws2_32.lib")
#include <string.h>
void ShowWebIP(const char *pszUrl)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
printf("init socket failed");
return;
}
struct hostent *pHost = gethostbyname(pszUrl);
if (pHost == NULL)
{
WSACleanup();
printf("pHost == NULL \n");
return;
}
printf("主机名:%s \n", pHost->h_name); // 主机正式名称
int iIndex = 0;
while(pHost->h_aliases[iIndex])
{
printf("别名:%s \n", pHost->h_aliases[iIndex]); // 主机别名,可以有多个
iIndex++;
}
printf("地址类型:%d \n", pHost->h_addrtype); // 返回地址类型,通常是AF_INET、IPV4或者AF_INET6、IPV6
printf("length:%d \n", pHost->h_length); // 地址字节数,IPV4是4,IPV6是6
iIndex = 0;
while(pHost->h_addr_list[iIndex])
{
printf("ip:%s \n", inet_ntoa(*(struct in_addr*)pHost->h_addr_list[iIndex]));
iIndex++;
}
printf("\n");
WSACleanup();
}
int main(int argc,char *argv[])
{
ShowWebIP("www.csdn.net"); // 注意不能带http://
ShowWebIP("www.baidu.com");
ShowWebIP("www.qq.com");
getchar();
return 0;
}
关键点:
struct hostent {
char FAR * h_name; // 主机正式名称
char FAR * FAR * h_aliases; // 主机备用名称,可以有多个,该参数是个二维数组,以NULL结束
short h_addrtype; // 地址类型,通常是AF_INET、IPV4或者AF_INET6、IPV6
short h_length; // 每个主机地址字节数,IPV4是4,IPV6是6
char FAR * FAR * h_addr_list; // 主机所有IP地址,该值是网络字节序,该参数是个二维数组,以NULL结束
};