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 列表: \n");
31     int x;
32     for (x = 0; host->h_aliases[x]; x++) {
33         printf("%s\n", host->h_aliases[x]);
34     }
35 
36     printf("IP列表: \n");
37 
38 
39     for (x = 0; ; x++)
40         //for (x = 0; *host->h_addr_list; x++) //2個for寫法一樣
41     {
42         printf("IP:[%d][%s]\n", 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 }

結果截圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM