socket编程之gethostbyname获取IP列表和Host别名列表

gethostbyname 函数原型:

 struct hostent FAR * WSAAPI gethostbyname( _In_z_ const char FAR * name ); 

gethostbyname 参数为一个域名,返回一个指向hostent 的指针

hostent结构体内部包含了主机名、别名、IP地址列表等内容

 

struct  hostent {
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr  h_addr_list[0]          /* address, for backward compat */
};

 

//#define _WINSOCK_DEPRECATED_NO_WARNINGS

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS

#include<WinSock2.h>
#include<iostream>
#include <windows.h>

using namespace std;

#pragma comment(lib, "ws2_32.lib")

int main()
{

    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD(1, 1);

    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0) {
        return 0;
    }

    hostent *host = gethostbyname("ueditor.baidu.com");

    printf("host name alias 列表: \n");
    int x;
    for (x = 0; host->h_aliases[x]; x++) {
        printf("%s\n", host->h_aliases[x]);
    }

    printf("IP列表: \n");


    for (x = 0; ; x++)
        //for (x = 0; *host->h_addr_list; x++) //2个for写法一样
    {
        printf("IP:[%d][%s]\n", x, inet_ntoa(*((in_addr *)host->h_addr_list[x])));
        if (host->h_addr_list[x] + host->h_length >= host->h_name)
        {
            break;
        }
    }

    /*  host->h_addr_list[i]是地址的指针,host->h_length是地址的长度(字节数),
    两者相加是地址结束的指针,host->h_name在所有地址之后,
    所以如果host->h_addr_list[i] + host->h_length >= host->h_name,就表示所有地址都取完了。*/

    getchar();

    return 0;
}

 

 

貌似有点问题?有空再说。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值