如何将域名转换为ip
2017-11-22 14:50
666 查看
一,前言
这篇文章主要讲述了如何将域名如“www.baidu.com”转换为类似“127.0.0.1”的IP地址,转换的过程主要使用了DNS协议相关的内容,但我们的重点并不是这里,有兴趣的可自行了解。我主要讲的是如何使用,主要包括以下几个内容:
1,hostent结构体
2,gethostbyname函数的用法
以上内容全都是在Linux环境里。
二,详细内容
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地址可能有多个,这也不难理解,如果你有多个网卡,你的IP地址自然也是有多个,但它们实际却都是指向你的。
另外还有一个定义h_addr它是一个指针,它指向h_addr_list[0],其实大部分时候我们只需要一个IP地址就够了,所以没必要知道那么多它的别名,需要注意的是这里的IP都是二进制的形式,它不是我们常见的点分十进制形式,所以如果直接打印可能会带来疑惑。
2,gethostbyname函数
它所在头文件:
sys/socket.h
netdb.h
//这里之所以不用include那种形式是因为带上‘#’markdown字体将会变大,所以见谅。
函数原型:
hosten* gethostbyname(const char* hostname);
它返回一个结构体的指针,如果没有找到“hostname”,将会返回NULL。
接下来请看其使用:
2.1
上述代码的功能主要是用户给定一个域名,然后打印出它的别名,以及它的所有IP地址。
其中inet_ntop函数是将网络字节序转为点分十进制形式。
请看运行结果:
经过编译之后,我们发现淘宝网的正式名称其实是那一长串,而它的别名才是我们熟悉的那个。
2.2 h_addr的使用
我们已经知道,h_addr是一个域名众多IP地址中的一个,但是因为它是二进制形式,所以在使用时是可以直接使用的,如下:
结果:
三,结论
遇到困难,搞了半天才弄明白了,记录下来,方便自己,也留给需要的有缘人吧,综上。
这篇文章主要讲述了如何将域名如“www.baidu.com”转换为类似“127.0.0.1”的IP地址,转换的过程主要使用了DNS协议相关的内容,但我们的重点并不是这里,有兴趣的可自行了解。我主要讲的是如何使用,主要包括以下几个内容:
1,hostent结构体
2,gethostbyname函数的用法
以上内容全都是在Linux环境里。
二,详细内容
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地址可能有多个,这也不难理解,如果你有多个网卡,你的IP地址自然也是有多个,但它们实际却都是指向你的。
另外还有一个定义h_addr它是一个指针,它指向h_addr_list[0],其实大部分时候我们只需要一个IP地址就够了,所以没必要知道那么多它的别名,需要注意的是这里的IP都是二进制的形式,它不是我们常见的点分十进制形式,所以如果直接打印可能会带来疑惑。
2,gethostbyname函数
它所在头文件:
sys/socket.h
netdb.h
//这里之所以不用include那种形式是因为带上‘#’markdown字体将会变大,所以见谅。
函数原型:
hosten* gethostbyname(const char* hostname);
它返回一个结构体的指针,如果没有找到“hostname”,将会返回NULL。
接下来请看其使用:
2.1
#include<stdio.h> #include<netdb.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<stdlib.h> #include<string.h> int main(int argc,char* argv[]) { char* ptr,**pptr; struct hostent* hptr; char str[32]; ptr=argv[1]; if((hptr=gethostbyname(ptr))==NULL) { perror("gethostbyname"); return -1; } printf("offical hostname:%s\n",hptr->h_name); for(pptr=hptr->h_aliases;*pptr!=NULL;pptr++) { printf("alias:%s\n",*pptr); } pptr=hptr->h_addr_list; for(;*pptr!=NULL;pptr++) { printf("address:%s\n",inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str))); } return 0; }
上述代码的功能主要是用户给定一个域名,然后打印出它的别名,以及它的所有IP地址。
其中inet_ntop函数是将网络字节序转为点分十进制形式。
请看运行结果:
经过编译之后,我们发现淘宝网的正式名称其实是那一长串,而它的别名才是我们熟悉的那个。
2.2 h_addr的使用
我们已经知道,h_addr是一个域名众多IP地址中的一个,但是因为它是二进制形式,所以在使用时是可以直接使用的,如下:
#include<stdio.h> #include<netdb.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<stdlib.h> #include<string.h> int main(int argc,char* argv[]) { //char* ptr,**pptr; struct hostent* hptr; //char str[32]; ptr=argv[1]; if((hptr=gethostbyname(ptr))==NULL) { perror("gethostbyname"); return -1; } /* printf("offical hostname:%s\n",hptr->h_name); for(pptr=hptr->h_aliases;*pptr!=NULL;pptr++) { printf("alias:%s\n",*pptr); } pptr=hptr->h_addr_list; for(;*pptr!=NULL;pptr++) { printf("address:%s\n",inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str))); }*/ struct in_addr myaddr; memcpy(&myaddr.s_addr,hptr->h_addr,sizeof(hptr->h_addr)); printf("address:%s\n",inet_ntoa(myaddr)); //printf("address:%s\n",inet_ntop(hptr->h_addrtype,ptr,str,sizeof(str))); return 0; }
结果:
三,结论
遇到困难,搞了半天才弄明白了,记录下来,方便自己,也留给需要的有缘人吧,综上。
相关文章推荐
- 如何在程序中将ip转换为域名-(2013/09/18)
- 如何向亲戚朋友解释什么是IP,端口和域名
- IP转换成域名
- 如何查看域名绑定几个ip
- 一个IP,一个linux服务器,两个项目,两个域名;如何将两个域名配置到同一个IP的两个项目中。
- 如何把一个域名指向 服务器。 ( domain to server ip)
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
- 如何向亲戚朋友解释什么是IP,端口和域名
- 如何向亲戚朋友解释什么是IP,端口和域名
- 如何在tomcat发布项目,用ip(或者域名)就能访问该webapp
- 如何从servlet中获取客户端ip并转换ip为long值
- ip转换为纯数字(如何用数字表示ip?)
- 如何查询ip上所绑定的域名
- 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(2)
- 如何让同一服务,ip域名session共享。
- WinServer2008下IIS8如何给网站配置域名/IP来访问
- 没有固定IP,用花生壳的服务器做网站,如何使用自己的域名访问
- wordpress如何访问网页时显示域名不显示ip
- 域名如何解析到指定IP?
- C++服务器之IP与域名转换