网络编程练习-名字与地址转换

主机名字与IP地址之间的映射由DNS(域名系统,Domain Name System)完成。

DNS中的条目称为资源记录(resource record, RR),其中包括以下字段

A               记录一个主机名映射的32位IPv4地址。

AAAA       记录一个主机名映射的128位IPv6地址。

PTR           把IP地址映射成主机名。

                   对IPv4,32地址的4个字节先反转顺序,每个字节换成各自的十进制ASCII后,再添上in-addr.arpa

                   对IPv6,32个四位组先反转顺序,每个四位组转换成16进制的ASCII后,再添上ip6.arpa

MX             记录把一个主机指定作为给定主机的“邮件交换器”,可能有多个,有优先级改变,值越小优先级越高

CNAME     canonical name(规范名字),为常用的指派CNAME记录。


不使用DNS也可能获取名字和地址信息常用的替代方法有:

静态主机文件(通常是/etc/hosts,也可能是/etc/nsswitch.conf等)

网络信息系统(Network Information System, NIS)

轻权目录访问协议(Lightweight Director Access Protocol,LDAP)


1,gethostbyname&gethostbyaddr

这两个函数分别通过名字获取ip地址和通过ip地址过去主机名字。

函数原型(linux man page):


这两个函数返回一个hostent的结构如下(linux man page):


对于这两个函数,出错是不设置errno,而是将全局整数变量h_errno设置为以下常值(<netdb.h>)。

HOST_NOT_FOUND

TRY_AGAIN

NO_RECOVERY

NO_DATA(NO_ADDRESS)

函数 const char* hstrerror(int err)可以解析这些错误,返回错误说明。


2,getservbyname&getservbyport

像主机一样,服务也通常靠名字来认知,以上两个函数可以通过名字和服务的映射文件(通常是/etc/services)获取服务和名字。


3,getaddrinfo

这个函数可以处理名字及地址到服务和端口的转换。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值