linux通过域名获取主机信息

参考 《linux网络编程》  宋敬彬  孙海滨 著

 

通过域名获取主机信息的方法很简单,用函数gethostbyname()就可以。

函数原型如下:

#include <netdb.h>

struct  hostent  *gethostbyname( const  char  *name)

 

gethostbyname()函数返回值是一个指向结构struct  hostent 类型变量的指针,为NULL时发生错误。可以用

errno获得。

常见的错误类型如下:

HOST_NOT_FOUND:  查询的主机不可知

NO_ADDRESS , NO_DATA : 请求的名称合法但是没有合适的ip地址

NO_RECOVERY :域名服务器不响应

TRY_AGAIN:域名服务器当前出现临时性错误,稍候再试

 

结构struct hostent 的原型:

struct  hostent

{

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

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

         int      h_addrtype;          //主机地址类型

         int    h_length;                // 地址长度

         char   **h_addr_list;      //地址列表

}

 

 

具体如何获取主机信息代码如下:

                          

我保存为g.c

运行结果如下:

./g www.csdn.net
主机正式名称 :www.csdn.net
主机地址类型:AF_INET
地址长度:4字节
IP:252.16.167.9


由于函数gethostbyname() 不可重入,它传出的值为一块静态的内存地址,当另一次调用后会覆盖前一次。所以每次调用之后必须马上将结果取出,不然会被覆盖。目前gethostbyname()已经不推荐使用,它有了替代函数即getaddrinfo。后者是线程安全的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值