1. 程式人生 > 其它 >Linux網路程式設計中C語言域名解析

Linux網路程式設計中C語言域名解析


/*
****** 域名解析 ************************** * 函式名:struct hostent *gethostbyname(const char *name); * 功能:域名解析 * 引數: * const char *name:域名或者ip * 返回值:struct hostent * * 成功:返回資料結構體 * 失敗:NULL * ***************************************/ /********釋放解析後的資料空間****************** * 函式名:void endhostent(void); * 功能:釋放gethostbyname函式申請的空間 * 引數:無 * 返回值:無 * ***************************************
*/ #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { if (argc != 3) { printf("引數錯誤:./程式名稱 ip地址或者域名 埠號\n"); return 0; } for
(int i = 0; i < argc; i++) { printf("引數[%d] = %s\n", i, argv[i]); } printf("列印解析資料:\n"); struct hostent *hs = gethostbyname(argv[1]); if (hs == NULL) { perror("獲取失敗:"); exit(0); } char *ip = NULL; //將網路大端位元組序的ip轉為字元點分形式 ip = inet_ntoa(*(struct
in_addr *)hs->h_addr_list[0]); //輸出ip地址 printf("ip地址:%s\n", ip); //釋放我轉換的資料資訊 endhostent(); return 0; } // struct hostent //只支援IPv4 // { // char *h_name; /* 主機正式名稱 */ // char **h_aliases; /* 別名列表 */ // int h_addrtype; /* 主機地址型別 */ // int h_length; /* 地址的長度 */ // char **h_addr_list; /* 地址列表 */ // } //#define h_addr h_addr_list[0] /* 為了向後相容 */