linux通过域名获取主机信息
2010-06-22 22:41
162 查看
参考 《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。后者是线程安全的。
通过域名获取主机信息的方法很简单,用函数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; //地址列表
}
具体如何获取主机信息代码如下:
#include <netdb.h> #include <string.h> #include <stdio.h> int main (int argc,char *argv[]) { struct hostent *ht=NULL; if(argc==2) { ht = gethostbyname(argv[1]); } if (ht){ int i=0; printf("主机正式名称 :%s/n",ht->h_name); printf("主机地址类型:%s/n",ht->h_addrtype==AF_INET?"AF_INET":"AF_INET6"); printf("地址长度:%d字节/n",ht->h_length); for(i=0;;i++) { if(ht->h_addr_list[i]!=NULL) { printf("IP:%s/n",inet_ntoa((unsigned int *)ht->h_addr_list[i])); } else break; } for(i=0;;i++) { if(ht->h_aliases[i]!=NULL) { printf("主机别名 %d:%s/n",i,ht->h_aliases[i]); } else break; } } return 0; }
我保存为g.c
运行结果如下:
./g www.csdn.net
主机正式名称 :www.csdn.net
主机地址类型:AF_INET
地址长度:4字节
IP:252.16.167.9
由于函数gethostbyname() 不可重入,它传出的值为一块静态的内存地址,当另一次调用后会覆盖前一次。所以每次调用之后必须马上将结果取出,不然会被覆盖。目前gethostbyname()已经不推荐使用,它有了替代函数即getaddrinfo。后者是线程安全的。
相关文章推荐
- 通过主机名(域名)获取IP地址,主机别名等信息
- 通过主机名(域名)获取IP地址,主机别名等信息
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip 、获取本地主机的名字
- linux 通过Ip获取主机名等信息gethostbyaddr()等。
- Linux 网络编程之通过IP或者主机名获取信息
- linux_5 个获取 Linux 主机信息的命令
- shell获取Linux主机信息(mac地址,处理器,主板,uuid,硬盘)的方法
- Linux下通过ioctl系统调用来获取和设置网络信息
- linux下通过netlink 获取系统路由及接口地址信息
- linux下libpcap 获取当前主机的网卡信息
- 5个获取Linux主机信息的命令
- linux之通过ptrace获取指定pthread线程的寄存器信息
- Linux LAN 通过IP获取目标主机的MAC地址
- Linux环境下获取当前主机的IP/MAC等信息(C/C++)
- Linux下通过ioctl系统调用来获取和设置网络信息
- 通过PowerShell获取域名whois信息 推荐
- (转载)Linux网络编程-使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 用来获取Linux主机信息的5个常用命令
- 通过mssql数据库来获取主机的硬件相关信息,网卡,硬盘,主板等
- 使用Python收集获取Linux系统主机信息