Linux下域名IP互轉

嚇人的猿發表於2018-03-01

域名轉換

  1. 通過域名獲取ip地址等資訊

#include <netdb.h>
struct hostent *gethostbyname(const char *name);
/*
    name:指向主機名的指標。
    返回一個hostent指標記錄著主機資訊。
*/
struct hostent
{
    char *h_name; //表示的是主機的規範名。例如www.google.com的規範名其實是www.l.google.com
    char ** h_aliases;//表示的是主機的別名.www.google.com就是google他自己的別名。有的時候,有的主機可能有好幾個別名,這些,其實都是為了易於使用者記憶而為自己的網站多取的名字。
    int h_addrtype;//表示的是主機ip地址的型別,到底是ipv4(AF_INET),還是pv6(AF_INET6)
    int h_length;//表示的是主機ip地址的長度
    char ** h_addr_list;//表示的是主機的ip地址
};

示例程式碼:

#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
int main(void)
{
    struct hostent* hent;
    int i = 0;
    char addr[16];

    hent = gethostbyname("www.baidu.com");
    printf("h_name: %s\n", hent->h_name);

    while (hent->h_aliases[i] != NULL)
        printf("aliase:%s\n", hent->h_aliases[i++]);

    i = 0;
    while(hent->h_addr_list[i] != NULL)
        printf("ip addr %s\n", inet_ntop(hent->h_addrtype, hent->h_addr_list[i++], addr, sizeof(addr)));

    return 0;
}

  1. 通過ip地址獲取到規範名別名等資訊

#include <netdb.h>
struct hostent * gethostbyaddr(const  void * addr, socklen_t len, int family);
/*
返回:若成功則為非空指標,若出錯則為NULL且設定h_errno 
*/

相關文章