在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname()、gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化。其中gethostbyname()是将主机名转化为IP地址,gethostbyaddr()则是逆操作,是将IP地址转化为主机名。

函数原型:

    #include <netdb.h>

         struct hostent* gethostbyname(const char* hostname);

         struct hostent* gethostbyaddr(const char* addr, size_t len, int family);

结构体:

 struct hostent

         {

             char *h_name;       /*正式主机名*/

             char **h_aliases;   /*主机别名*/

             int h_addrtype;     /*主机IP地址类型 IPv4为AF_INET*/

             int h_length;       /*主机IP地址字节长度,对于IPv4是4字节,即32位*/

             char **h_addr_list; /*主机的IP地址列表*/

         }

         #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地址

 #include <netdb.h>

 #include <sys/socket.h>

 #include <stdio.h>

 int main(int argc, char **argv)

 {

 char *ptr, **pptr;

     struct hostent *hptr;

     char str[] = {'\0'};

 /* 取得命令后第一个参数,即要解析的域名或主机名 */

 ptr = argv[];  //如www.baidu.com

 /* 调用gethostbyname()。结果存在hptr结构中 */

     if((hptr = gethostbyname(ptr)) == NULL)

     {

         printf(" gethostbyname error for host:%s\n", ptr);

         return ;

     }

 /* 将主机的规范名打出来 */

     printf("official hostname:%s\n",hptr->h_name);

 /* 主机可能有多个别名,将所有别名分别打出来 */

 for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)

 printf(" alias:%s\n",*pptr);

               /* 根据地址类型,将地址打出来 */

 switch(hptr->h_addrtype)

     {

 case AF_INET,AF_INET6:

 pptr=hptr->h_addr_list;

                             /* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */

             for(; *pptr!=NULL; pptr++)

                 printf(" address:%s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));

             printf(" first address: %s\n", inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));

         break;

         default:

             printf("unknown address type\n");

         break;

     }

     return ;

 }

编译运行

#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. 通过阿里云域名动态解析 IP 地址

    这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥 ...

  2. c# 域名转换成ip地址

    tcp协议发送到某个地址端口号是,地址是域名3322.net类型,转换成ip地址.亲测两种方法都可以. 1.参考https://blog.csdn.net/szsbell/article/detail ...

  3. Java如何根据主机名(域名)获取IP地址?

    在Java编程中,如何根据主机名(域名)获取IP地址? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将主机名更改为指定的IP地址. pac ...

  4. 通过主机名(域名)获取IP地址,主机别名等信息

    一.所用API函数介绍 struct hostent FAR*gethostbyname( const char FAR* name ); 传入參数:const char FAR* name.主机名或 ...

  5. 解析远程域名主机的IP地址

    我们知道,计算机在访问远程主机的时候,本质上是通过IP地址来进行访问的,但我们实际在使用的时候,例如我们想访问百度的主页,我们是通过在浏览器的地址栏输入百度的域名来进行访问的,因此,计算机需要将百度的 ...

  6. 域名与服务器 ip地址的理解

    域名 服务器 ip地址具有怎样的关系呢 通俗的讲,我们访问一个网站就相当于访问一个服务器的文件,如果想要通过自己的域名来访问一个网站,首先得将域名部署到你的服务器上,然后就可以通过域名访问到你服务器上 ...

  7. 多域名绑定同一IP地址,Node.js来实现

    本来打算用Nginx来实现,看了一会Nginx的配置,感觉又要费时间学习,就抱着试试看的心在网上搜,是否可以用Node.js来实现. 没想到,竟然搜到了.想试一下,但国内域名备案时间长达一个月,我肯定 ...

  8. 查看域名对应的ip地址

    nslookup   www.google.com.hk

  9. 如何配置DNS服务器(局域网——域名指向某个IP地址)

    单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器.   如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器.   在“操作”菜单上 ...

随机推荐

  1. github使用成长记

    学校里一直都有自己写一些网页,一方面为了学习熟练技能,另一方面也是兴趣所在.但是独乐乐不如众乐乐,一直向往有那么一个平台能把自己做得东西分享给广大网友,并且想借着分享的契机和各位程序猿交流学习心得(这 ...

  2. NODE编程(三)--构建Node Web程序1

    一.HTTP服务器的基本知识 1.Node如何向开发者呈现HTTP请求 Node中的http模块提供了HTTP服务器和客户端接口: var http = require('http'); 创建HTTP ...

  3. C#中登录验证FormsAuthentication

    1:前台编写一个登录界面,这里为了简化,只有用户名和密码 代码如下: <form method="post" action="/User/CheckLogin&qu ...

  4. SQL Server网络地址备份

    SQL Server网络地址备份 Ø  软件系统: SQL Server 各版本 1.问题描述: 在XX客户做SQL Server 到Oracle 数据迁移时,当时由于客户的SQL Server200 ...

  5. 如何定位到append的当前位置,不用拉滚动条scrollIntoView方法

    var bb_mes_con = $('bb_mes_con'); var mes_html = document.createElement('div'); mes_html.setAttribut ...

  6. MySQL--INFORMATION_SCHEMA COLUMNS表

    在程序中,若想要动态地得到某一个表的具体信息,就使用到了MySQL 中的 INFORMATION_SCHEMA 信息数据库,而它又包含很多表,见下: INFORMATION_SCHEMA SCHEMA ...

  7. 关于Eclipse的工作空间设置默认个数和配置

    &

  8. poj 2057 树形dp 贪心

    思路:设sum[i],le[i],back[i],worm[i]分别表示以i为根节点需要的完成步数,叶子节点数,失败回退步数,以及i是否有虫. #include<iostream> #in ...

  9. HttpClient(4.3.5) - HTTP Entity

    HTTP entity HTTP messages can carry a content entity associated with the request or response. Entiti ...

  10. django 学习-2 模板

    如何使用渲染模板的方法来显示内容. 1.创建一个项目dream django-admin.py   startproject   dream cd  dream    再创建一个应用 python m ...