域名转化到IP地址的实现
来源:互联网 发布:js中的prop 编辑:程序博客网 时间:2024/06/11 23:50
在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname()、gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化。其中gethostbyname()是将主机名转化为IP地址,gethostbyaddr()则是逆操作,是将IP地址转化为主机名。
函数原型:
1 #include <netdb.h>2 3 struct hostent* gethostbyname(const char* hostname);4 5 struct hostent* gethostbyaddr(const char* addr, size_t len, int family);
结构体:
1 struct hostent 2 3 { 4 5 char *h_name; /*正式主机名*/ 6 7 char **h_aliases; /*主机别名*/ 8 9 int h_addrtype; /*主机IP地址类型 IPv4为AF_INET*/10 11 int h_length; /*主机IP地址字节长度,对于IPv4是4字节,即32位*/12 13 char **h_addr_list; /*主机的IP地址列表*/14 15 }16 17 #define h_addr h_addr_list[0] /*保存的是ip地址*/
函数gethostbyname():用于将域名(www.baidu.com)或主机名转换为IP地址。参数hostname指向存放域名或主机名的字符串。
函数gethostbyaddr():用于将IP地址转换为域名或主机名。参数addr是一个IP地址,此时这个ip地址不是普通的字符串,而是要通过函数inet_aton()转换。len为IP地址的长度,AF_INET为4。family可用AF_INET:Ipv4或AF_INET6:Ipv6。
Example:将百度的www.baidu.com 转换为ip地址
1 #include <netdb.h> 2 3 #include <sys/socket.h> 4 5 #include <stdio.h> 6 7 int main(int argc, char **argv) 8 9 {10 11 char *ptr, **pptr;12 13 struct hostent *hptr;14 15 char str[32] = {'\0'};16 17 /* 取得命令后第一个参数,即要解析的域名或主机名 */18 19 ptr = argv[1]; //如www.baidu.com20 21 /* 调用gethostbyname()。结果存在hptr结构中 */22 23 if((hptr = gethostbyname(ptr)) == NULL)24 25 {26 27 printf(" gethostbyname error for host:%s\n", ptr);28 29 return 0;30 31 }32 33 /* 将主机的规范名打出来 */34 35 printf("official hostname:%s\n",hptr->h_name);36 37 /* 主机可能有多个别名,将所有别名分别打出来 */38 39 for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)40 41 printf(" alias:%s\n",*pptr);42 43 /* 根据地址类型,将地址打出来 */44 45 switch(hptr->h_addrtype)46 47 {48 49 case AF_INET,AF_INET6:50 51 pptr=hptr->h_addr_list;52 53 /* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */54 55 for(; *pptr!=NULL; pptr++)56 57 printf(" address:%s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));58 59 printf(" first address: %s\n", inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));60 61 break;62 63 default:64 65 printf("unknown address type\n");66 67 break;68 69 }70 71 return 0;72 73 }
编译运行
#gcc test.c
#./a.out www.baidu.com
official hostname:www.a.shifen.com
alias:www.baidu.com
address: 220.181.111.148
……
first address: 220.181.111.148
0 0
- 域名转化到IP地址的实现
- inet_ntoa只能转化IP地址 不能转域名的问题
- 域名到ip地址转换
- 获取域名的IP地址
- 获取域名的IP地址
- Python实现同域名下多个IP地址的解析
- 利用DNS类.域名转化ip地址,利用ip地址转换域名
- 将IP地址更新到3323域名
- linux C:将域名转化为IP地址
- unsigned long整型数字转化成IP地址的实现
- 域名转ip地址编程实现
- nginx代理双域名,同一个IP地址的服务器实现两个域名配置
- Windows IP转化域名
- 域名转化为IP
- java 实现地址到经纬度坐标的转化
- (转载)java 实现地址到经纬度坐标的转化
- java 实现地址到经纬度坐标的转化
- 更新3322域名的ip地址
- JavaScript编写病毒
- javascript onscroll
- STL中mem_fun和mem_fun_ref的用法及区别
- Kettle解析LIST JSON数据
- 特定用户QQ群聊天记录导出的实现
- 域名转化到IP地址的实现
- 二.Windows下搭建appium环境
- weex技术交流微信群
- 中德幼儿园的差别,被震撼到了!!
- Android 圆角按钮BUTTON
- iOS ARC与非ARC的混合使用
- android studio如何打印
- SQL语句 打印输出 九九乘法表
- C++builder Linker error