/**
* author : 18312615416@163.com
* @function name: main
* @brief : 程式實現解析域名(如www.baidu.com),把獲取到的域名的IP地址全部輸出到終端
* @param : @argc : 終端輸入引數的個數
: @argv[] : 終端輸入的引數
* @date : 2024/06/05
* @version : 1.0
* @note : inet_ntoa(struct in_addr in)可把網路位元組序的IP地址轉換為字串形式的點分十 進位制IP
: gethostbyname()可獲取域名結構
*/
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc,char *argv[])
{
struct hostent *host;
struct in_addr **addr_list;
int i;
//檢查引數有效性
if (argc != 2)
{
fprintf(stderr, "argument is invaild ,errno:%d,%s\n",errno,strerror(errno));
exit(1);
}
// 獲取域名的hostent結構
host = gethostbyname(argv[1]);
if (host == NULL)
{
// gethostbyname()返回NULL表示出錯
perror("gethostbyname failed\n");
return -1;
}
//列印主機(百度)的官方名稱
printf("Hostname: %s\n", host->h_name);
//h_addr_list為指向主機網路地址的指標陣列,以空指標終止
addr_list = (struct in_addr **) host->h_addr_list;
// 遍歷IP地址列表
for(i = 0; addr_list[i] != NULL; i++)
{
// 使用inet_ntoa()將網路位元組序的IP地址轉換為點分十進位制的字串形式
printf("IP Address : %s\n", inet_ntoa(*addr_list[i]) );
}
//遍歷主機備用名稱
for(i = 0;host->h_aliases[i] != NULL; ++i)
{
//列印主機備用名
printf("other hostname : %s\n",host->h_aliases[i]);
}
return 0;
}