通过域名获取IP地址
来源:互联网 发布:大赢通软件下载 编辑:程序博客网 时间:2024/04/28 03:05
域名仅仅是IP地址的一个助记符,目的是方便记忆,通过域名并不能找到目标计算机,通信之前必须要将域名转换成IP地址。
gethostbyname() 函数可以完成这种转换,它的原型为:
#include <netdb.h>struct hostent *gethostbyname(const char *hostname);
hostname 为主机名,也就是域名。使用该函数时,只要传递域名字符串,就会返回域名对应的IP地址。返回的地址信息会装入 hostent 结构体,该结构体的定义如下:
struct hostent{ char *h_name; //official name char **h_aliases; //alias list int h_addrtype; //host address type int h_length; //address lenght char **h_addr_list; //address list}
从该结构体可以看出,不只返回IP地址,还会附带其他信息,各位读者只需关注最后一个成员 h_addr_list。下面是对各成员的说明:
- h_name:官方域名(Official domain name)。官方域名代表某一主页,但实际上一些著名公司的域名并未用官方域名注册。
- h_aliases:别名,可以通过多个域名访问同一主机。同一IP地址可以绑定多个域名,因此除了当前域名还可以指定其他域名。
- h_addrtype:gethostbyname() 不仅支持 IPv4,还支持 IPv6,可以通过此成员获取IP地址的地址族(地址类型)信息,IPv4 对应 AF_INET,IPv6 对应 AF_INET6。
- h_length:保存IP地址长度。IPv4 的长度为4个字节,IPv6 的长度为16个字节。
- h_addr_list:这是最重要的成员。通过该成员以整数形式保存域名对应的IP地址。对于用户较多的服务器,可能会分配多个IP地址给同一域名,利用多个服务器进行均衡负载。
- hostent 结构体变量的组成如下图所示:
下面的代码主要演示 gethostbyname() 的应用,并说明 hostent 结构体的特性:
#include <stdio.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(int argc, char ** argv){ struct hostent *host; host = gethostbyname(argv[1]); if(host == NULL) { printf("Get IP address error"); return -1; } int i = 0; for (; host->h_aliases[i]; i++) { printf("Aliases %d : %s\n", i+1, host->h_aliases[i]); } printf("Address type : %s\n", (host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6"); for (i=0; host->h_addr_list[i]; i++) { printf("AP addr %d:%s\n", i+1, inet_ntoa(*(struct in_addr*)(host->h_addr_list[i]))); } return 0;}
运行结果:
[root@h ~]# ./host www.baidu.comAliases 1 : www.baidu.comAddress type : AF_INETAP addr 1:220.181.111.188AP addr 2:220.181.112.244[root@h ~]# ./host gbk.sms.webchinese.cnAddress type : AF_INETAP addr 1:219.235.3.148[root@h ~]#
0 0
- 通过域名获取IP地址
- 通过域名获取ip地址
- 通过域名获取ip地址
- 通过域名获取IP地址
- winsock 通过域名获取ip地址
- WINDOWS下C++通过域名获取IP地址
- [Java] 通过域名获取IP地址的方法与作用
- 查看ip地址 通过域名
- 获取IP地址 域名解释
- 根据域名获取IP地址
- 获取域名的IP地址
- 根据域名获取IP地址
- 从域名获取IP地址
- 获取指定域名IP地址
- 给定域名获取IP地址
- 获取域名的IP地址
- 根据域名获取ip地址
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip
- java各种数据类型的转换问题
- NYoj_20吝啬的国度
- SpringMVC上下文父子容器
- maven 常用命令
- emulating ionic really slow even on genymotion just using the “tabs” example
- 通过域名获取IP地址
- Java部分流关闭时的源码操作
- Programming Scala第5章demo02 Option类型
- CentOS-6.5-x86_64 安装 apache-tomcat-7.0.68.tar.gz
- 算法之冒泡排序
- 搭建 Struts2 的环境:
- admob广告条下方显示
- java 输入方法
- 手势类--GestureDetector的使用