解析域名,獲取域名ip並輸出到終端

北极甜虾哟發表於2024-06-05
/**
  * 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;  

}   

相關文章