网络信息API

来源:互联网 发布:aix 安装软件 编辑:程序博客网 时间:2024/05/17 01:47

gethostbyname和gethostbyaddr
gethostbyname函数根据主机名称获取主机的完整信息,gethostbyaddr函数根据IP地址获取主机的完整信息。gethostbyname函数通过先在本地的/etc/hosts配置文件中查找主机,如果没有找到,再去访问DNS服务器。

#include <netdb.h>struct hostent* gethostbyname(const char* name);struct hostent* gethostbyaddr(const void* addr, size_t len, int type);

name参数指定目标主机的主机名,addr参数指定目标主机的IP地址,len参数指定addr所指IP地址的长度,type参数指定addr所指IP地址的类型,其合法取值包括AF_INET和AF_INET6。

hostent结构体的定义如下:

#include <netdb.h>struct hostent{    char* h_name;// 主机名    char** h_aliases;// 主机别名列表,可能有多个    int h_addrtype;// 地址类型(地址族)    int h_length;// 地址长度    char** h_addr_list;// 按网络字节序列出的主机IP地址列表};

getservbyname和getservbyport
getservbyname函数根据名称获取某个服务的完整信息,getservbyport函数根据端口号获取某个服务的完整信息。它们实际上都是通过读取/etc/services文件获取服务的信息的。

#include <netdb.h>struct servent* getservbyname(const char* name, const char* proto);struct servent* getservbyport(int port, const char* proto);

proto参数指定服务类型,给它传递“tcp”表示获取流服务,给它传递“udp”获取数据报服务,给它传递NULL则表示获取所有类型的服务。

结构体servent的定义如下:

#include <netdb.h>struct servent{    char* s_name;// 服务名称    char** s_aliases;// 服务的别名列表,可能有多个    int s_port;// 端口号,网络字节序    char* s_proto;// 服务类型,通常是tcp或者udp};
0 0
原创粉丝点击