IPとドメイン名の相互変換

2614 ワード

プログラミングではドメイン名がホストに直接アクセスできないことを知り,IPアドレスに変換する必要がある.しかし、一部のビジネス要件では、IPアドレスをドメイン名に変換する必要があります.
Linuxの下で、IPとドメイン名の相互変換のC言語は実現します:
#include 
#include 
#include 
#include 
#include 

//      IP
void getIpByHostName(char *hostname);
//  IP    
void getHontNameByIp(char *ip);

/**
*      
*/
// typedef struct hostent {
//     char * h_name;        //       
//     char ** h_aliases;    //     
//     int h_addrtype;       //      
//     int h_length;         //     
//     char ** h_addr_list;  //             
// } hostent;

void getIpByHostName(char *hostname) {
    struct hostent * host;                            //  hostent  
    struct in_addr in;
    struct sockaddr_in addr_in;
    extern int h_errno;

    if((host = gethostbyname(hostname))!=NULL) {
        memcpy(&addr_in.sin_addr.s_addr,host->h_addr,4);  //      、
        in.s_addr=addr_in.sin_addr.s_addr;
        printf("host name is %s
", hostname); printf("IP length: %d
", host->h_length); printf("Type: %d
", host->h_addrtype); printf("IP : %s
", inet_ntoa(in)); } else { printf("host name is :%s
",hostname); printf("error : %d
",h_errno); printf("%s
", hstrerror(h_errno)); } } void getHontNameByIp(char *ip) { struct hostent *host; struct in_addr in; struct sockaddr_in addr_in; extern int h_errno; if((host=gethostbyaddr(ip, sizeof(ip), AF_INET))!=NULL){ memcpy(&addr_in.sin_addr.s_addr, host->h_addr, 4); in.s_addr = addr_in.sin_addr.s_addr; printf("Host Name is %s
", host->h_name); printf("Ip length %d
", host->h_length); printf("Type is %d
", host->h_addrtype); printf("Ip is %s
", inet_ntoa(in)); } else { printf("error %d
", h_errno); printf("%s
", hstrerror(h_errno)); } } int main(int argc, char const *argv[]) { char hostname1[] = "www.ansore.net"; // char hostname2[] = "www.123qwdferwerfsdfataewfar.net"; // char ip[] = "139.129.35.50"; getIpByHostName(hostname1); printf("--------------------------------------------------------
"); getIpByHostName(hostname2); printf("--------------------------------------------------------
"); getHontNameByIp(ip); return 0; }