如何将域名转换为IP

如何将域名转化为IP

这篇文章主要讲述了如何将域名如“www.baidu.com”转换为类似“127.0.0.1”的IP地址,转换的过程主要使用了DNS协议相关的内容

1、hostent结构体说明

1,hostent结构体
struct hostent
{
char * h_name;
char ** alias_list;
int h_addrtype;
int h_length;
char ** h_addr_list;
};
h_name:主机的规范名,如“www.baidu.com”,它的规范名其实是“www.a.shifen.com”,这一点可以通过ping命令得到。
alisa_list:这是主机的别名,它是一个二级指针,这是因为主机的别名有可能有好几个。
h_addrtype:指主机的IP地址类型,到底是IPV4还是IPV6。
h_length:指主机的IP地址长度。
h_addr_list:它也是一个二级指针,它主要指向主机IP地址数组的指针,这是因为一个主机它的IP地址可能有多个

2、函数原型

函数原型:
hosten* gethostbyname(const char* hostname);

Unix/Linux下的gethostbyname函数常用来向DNS查询一个域名的IP地址。 由于DNS的递归查询,常常会发生gethostbyname函数在查询一个域名时严重超时,因此我们可以把gethostbyname封装成一个命令

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <netdb.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define LEN64 64
#define ALARM_TIMEOUT (10)


static void show_help(void)
{
	printf("usage: gethostbyname <domain name>\n");
	printf("example:\n");
	printf("\tgethostbyname www.baidu.com\n");
}


static void alarm_timeout()
{
	fprintf(stderr, "timeout %ds\n", ALARM_TIMEOUT);
    exit(0);
}


int main(int argc, const char *argv[])
{
	int len = 0;
	char addr[LEN64];
	char *ipstr = NULL;
	char **paddr = NULL;
	struct hostent *pdns;

	signal(SIGALRM, alarm_timeout);

    if (argc < 2)
    {
        show_help();
        return -1;
    }

	len = strlen(argv[1]);
    if (len >= LEN64) {
   	 	fprintf(stderr, "domain name is too big %d (> %d)\n", len, LEN64);
   	}

	alarm(ALARM_TIMEOUT); 
	pdns = gethostbyname(argv[1]);
	if(NULL == pdns)
	{
		perror("dns failed");
	}

	paddr = pdns->h_addr_list;
	memset(addr, 0, LEN64);
	for( ; *paddr != NULL; paddr++)
	{
		ipstr = inet_ntop(pdns->h_addrtype, *paddr, addr, sizeof(addr));
		printf("%s\n", ipstr);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值