zoukankan      html  css  js  c++  java
  • 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 */
    };

    写程序尝试调用它

     1 //#define _WINSOCK_DEPRECATED_NO_WARNINGS
     2 
     3 #define _WINSOCK_DEPRECATED_NO_WARNINGS
     4 #define _CRT_SECURE_NO_WARNINGS
     5 
     6 #include<WinSock2.h>
     7 #include<iostream>
     8 #include <windows.h>
     9 
    10 using namespace std;
    11 
    12 #pragma comment(lib, "ws2_32.lib")
    13 
    14 int main()
    15 {
    16 
    17     WORD wVersionRequested;
    18     WSADATA wsaData;
    19     int err;
    20 
    21     wVersionRequested = MAKEWORD(1, 1);
    22 
    23     err = WSAStartup(wVersionRequested, &wsaData);
    24     if (err != 0) {
    25         return 0;
    26     }
    27 
    28     hostent *host = gethostbyname("ueditor.baidu.com");
    29 
    30     printf("host name alias 列表: 
    ");
    31     int x;
    32     for (x = 0; host->h_aliases[x]; x++) {
    33         printf("%s
    ", host->h_aliases[x]);
    34     }
    35 
    36     printf("IP列表: 
    ");
    37 
    38 
    39     for (x = 0; ; x++)
    40         //for (x = 0; *host->h_addr_list; x++) //2个for写法一样
    41     {
    42         printf("IP:[%d][%s]
    ", x, inet_ntoa(*((in_addr *)host->h_addr_list[x])));
    43         if (host->h_addr_list[x] + host->h_length >= host->h_name)
    44         {
    45             break;
    46         }
    47     }
    48 
    49     /*  host->h_addr_list[i]是地址的指针,host->h_length是地址的长度(字节数),
    50     两者相加是地址结束的指针,host->h_name在所有地址之后,
    51     所以如果host->h_addr_list[i] + host->h_length >= host->h_name,就表示所有地址都取完了。*/
    52 
    53     getchar();
    54 
    55     return 0;
    56 }

    结果截图

  • 相关阅读:
    javascript keycode大全
    在WEB环境下打印报表的crystal的解决方案
    Trim()
    C#应用结构体变量
    锚点定位
    C# 按地址传值
    [GIIS]JS 图片 Preview
    c# 模拟网站登陆
    此数据库没有有效所有者,因此无法安装数据库关系图支持对象" 解决方法
    风讯.NET与NETCMS的选择—开源.NET内容管理系统
  • 原文地址:https://www.cnblogs.com/danmoqingshan/p/9316175.html
Copyright © 2011-2022 走看看