解析域名与IP地址

#include <stdio.h>

#include <stdlib.h>

#include <arpa/inet.h>

#include <assert.h>

#include <string.h>

#include <netdb.h>



#define ERROR(format, args...) fprintf(stderr, format, ##args)

void getHost(const char *url, char *host);

void getIP(const char *host, char *ip, size_t n);



int main(int argc, char *argv[])

{

    if(argc !=2 )

    {

        ERROR("Usage: %s url", argv[0]);

	return -1;

    }

    char *host = (char*)malloc(sizeof(char) * (strlen(argv[1]) + 1));

    char *ip = (char*)malloc(sizeof(char) * 16);

    getHost(argv[1], host);

    getIP(host, ip, 16);

    printf("Host: %s\nIP: %s\n", host, ip);

    free(ip);

    free(host);

    return 0;

}



void getHost(const char *url, char *host)

{

    char *p = strstr(url, "://");

    if(p)

    {

        strcpy(host, p + 3);

    }

    else

    {

        strcpy(host, url);

    }

    p = strstr(host, "/");

    if(p)

    {

        *p = '\0';

    }

}



void getIP(const char *host, char *ip, size_t n)

{

    struct hostent *he = gethostbyname(host);

    assert(he);

    assert(inet_ntop(AF_INET, he->h_addr_list[0], ip, n));  //只取第1个IP地址

}

你可能感兴趣的:(IP地址)