Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334357
  • 博文数量: 214
  • 博客积分: 4258
  • 博客等级: 上校
  • 技术积分: 2021
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-02 09:16
个人简介

http://blog.csdn.net/ly21st http://ly21st.blog.chinaunix.net

文章分类

全部博文(214)

文章存档

2018年(16)

2015年(1)

2014年(2)

2012年(22)

2011年(173)

分类: LINUX

2011-09-22 19:00:05

9.1 概述

       gethostnamegethostbyaddr在主机名字和ip地址间进行转换;

       getservbynamegetservbyport在服务名和端口号间进行转换。

9.2 域名系统

       严格来说,FQDN也称为绝对名字(absolute name),因此必须以一个点号结尾,但用户经常省略最后的点号。

 

 

DNS替代方法

       不适用DNS也可得到名字和地址信息,最常用的替代方法为静态主机文件(一般为文件/etc/hosts)或网络信息系统NIS(network Information System)。不幸的是,管理员如何配置一个主机来使用不同的名字服务时依赖于不同的实现的。

9.3 gethostbyname函数

struct hostent * gethostbyname(const char * hostname);

返回:非空指针---成功, 空指针---出错,同时设置h_errno

 

BIND4.9.2开始,新的gethostbyname版本允许主机名参数是点分十进制数串,也就是,下列形式的调用是可行的:

       hptr = gethostbyname(“202.62.226.33”);

       但是,Rlogin客户仅接受主机名,给它调用gethostbyname,而不接受点分十进制数组串。

       gethostbyname发生错误时,它不设置errno,而是将全局整数h_errno设置为下列常值:

1)HOST_NOT_FOUND

2)TRY_AGAIN

3)NO_RECOVERY

4)NO_DATA(N等同于NO_ADDRESS)

BIND的当前版本提供函数hstrerror,它将h_errno的值作为唯一的参数。

9.4 RES_USE_INET6解析器选项

1)应用程序本身设置此选项,首先调用解析器的res_init函数,然后打开该选项:

#include 

res_init();

_res.option |= RES_USE_INET6;

2)如果环境变量RES_OPTION含有串inet6,则此选项打开。

export  RES_OPTION = inet6

1)      解析器配置文件(一般为/etc/resolv.conf)可以包含下行:

option  inet6

9.5 gethostbyname2函数与IPv6支持

 

*返回主机名的函数

int  uname(struct  utsname *name);

int  gethostname (char *name, size_t  namelen);

9.9 getservbynamegetservbyport函数

       如果在我们的代码中,通过服务器的名字不是通过服务器端口来认知它,而且如果从主机到端口号的映射包含在一个文件中(一般是/etc/services),则如果端口号改变,我们所需做的所有修改就是改动文件/etc/services中的一行,而不是重新编译应用程序。

struct  servent * getservbyname( const char * servname, const char*  protoname);

返回: 非空指针------成功,空指针------出错

该函数返回一个指向下面所示结构的指针:

struct  servent {

   char  * s_name;   /* official service name  */

   char  ** s_aliases ;  /*  alias list */

   int    s_port;       /*  port  number,  network-byte  order  */

   char  * s_proto;    /* protocol  to use  */

};

 

struct servent * getservbyport( int port,  const  char * protoname);

返回: 非空指针------成功,空指针------出错

注意:prot值必须为网络字节序。

9.10 其他网络有关信息

首先,只有主机和网络信息是通过DNS提供的,服务和协议信息一般要从相应的文件中读。不同的实现可让管理员使用不同的方法来指定是使用DNS还是使用文件来得到主机和网络信息。

       第二,如果DNS正用于主机和网络信息,则只有键值查询函数才可用。例如,不能使用gethostent期待顺序浏览DNS中的所有表项。如果调用gethostent,它只读主机文件而避开DNS

       如果网络信息可以通过DNS得到,但很少有人这么用。通常,管理员创建并维护文件/etc/networks,并使用它而不是使用DNS。如果有此文件,则指定-i选项的netstat程序使用它,以输出每个网络的名字。

阅读(469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~