http://blog.csdn.net/u011239443/article/details/51655354

在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.com
20
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

域名转化到IP地址的实现相关推荐

  1. java域名到ip转换_域名转化到IP地址的实现

    在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname().gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化.其中geth ...

  2. 网络DNS域名转换成IP地址

    网络DNS域名转换成IP地址(完整代码,测试通过) using System; using System.Collections.Generic; using System.Linq; using S ...

  3. Python根据域名批量获取IP地址和经纬度(2021.12.1)

    Python批量获取域名对应的IP地址和经纬度 1.DN.DNS.URL简介 1.1 域名 1.1.1 不同类型的域名 1.1.1.1 TLDs: Top-Level Domains 顶级域 1.1. ...

  4. 如何通过域名获取主机ip地址

    如何通过域名获取主机ip地址 需要注意,主机不是本机,一般指服务器与客户端.主机信息主要包含ip地址和对应的域名.linux使用结构体struct hostent表示主机的信息.struct host ...

  5. python获取域名对应的ip_09python实现DNS查找域名对应的IP地址

    # DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候, # 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行 # 搜索的,而只是 ...

  6. 域名和服务器IP地址有什么关系?

    域名和服务器IP地址有什么关系?很多用户也经常听说或接触域名和服务器IP地址,一般用户访问网站是通过域名或搜索进入,但大多数人不知道的是在浏览器里面输入IP地址也可以直接访问网站,下面我们就详细聊聊域 ...

  7. Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址

    Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址 Linux使用etc/resolv.conf文件来存放DNS服务器的IP地址,使用cat命令查看. cat /etc/r ...

  8. java域名查询_Java技巧: 根据网址/域名查询DNS/IP地址

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, ...

  9. 多个域名对应一个IP地址

    多个域名对应一个IP地址 一开始的疑问:如何实现多一个域名解析到同一个IP地址,并且能区分出不同的网站内容? 实现 网站或服务在服务器中都对应着一个资源路径(一般是服务器磁盘文件系统中的文件夹),这个 ...

最新文章

  1. Java中为什么需要反射?反射要解决什么问题?
  2. Centos上安装EPEL
  3. uglify压缩angular控制器注意
  4. C++中引用和指针的不同
  5. 一场性能当道 优化为王的沙龙盛宴
  6. 腾讯2013年校园招聘笔试试题
  7. 测试比java_Java11比Java8快多少,不是测试人员一眼也能看懂
  8. python写音乐_Python国产库推荐之musicpy:让你用代码来写音乐
  9. 过渡效果_(新)61种数字胶动态过渡延时摄影效果转场 WIPE amp; LIGHT TRANSITIONS(3462)...
  10. Java : logback简单配置
  11. 函数式接口,方法引入
  12. mysql.h说明文档,mysql.h:没有文件或目录
  13. 美国将采纳TMF智慧城市成熟度模型
  14. 【系列三之CentOS系列】CentOS命令操作(2)
  15. 视频教程-ArcGIS for Android视频教程-Android
  16. suse linux安装rpm包,suse linux rpm 安装
  17. 从零开始前端学习[26]:html5的一些常用标签,header,footer,section,aside,figure,figcaption,nav,artical,
  18. java mysql vo mybatis 分页_Mybatis Plus 使用VO分页查询
  19. 2021年N1叉车司机考试总结及N1叉车司机操作证考试
  20. android 蓝牙Beacon开发

热门文章

  1. (ICML-2020)通过超球面的对齐和均匀性理解对比表示学习(一)
  2. B.FRIENDit:键盘轴体零死角剖析,挑选机械式键盘不必烦恼!
  3. can口通信的软件测试,RT1052+8、CAN通信例程测试
  4. Java Dome(实现一个简易版QQ聊天室)
  5. 基于java实现的分词以及词频统计,准备制作词云数据
  6. Dell H310配置no-raid直通模式
  7. smart gesture安装失败_3ds Max 2014 下载与安装步骤
  8. [转](9)跨段跳转,短调用和长调用堆栈图
  9. linux岗招聘_Linux运维工程师招聘岗位的面试题
  10. RobotStudio软件:ABB机器人行走轴添加与控制