UNIX Network Programming笔记之第十一章(一)

    第九、十章讲述SCTP协议及套接字编程, 第一次阅读暂时跳过。

    第十一章讲述名字与地址转换

    DNS

    DNS,即域名系统,主要用于主机名字与IP地址之间的转换。DNS中的条目称为RR,资源记录resource record,一共有以下若干种:
    1. A   A记录把一个主机名映射为一个32位的IPv4地址
    2. AAAA    AAAA记录把一个主机名映射为一个128位的IPv6地址
    3. PTR    把IP地址转换成主机名。对于IPv4地址,32位地址的4个字节先反转顺序, 每个字节都转换成各自的十进制ASCII值,然后再加上in-addr.arpa,结果字符串用于PTR查询;对于IPv6地址,128位地址的32个4位组先反转顺序,每个四位组转换成十六进制ASCII值,然后再加上ip6.arpa
    4.  MX    将右侧的主机指定成左侧给定主机的邮件交换器
    5. CNAME    CNAME代表规范名字,为常用的服务指派CNAME记录
    示例:
    freebsd       IN      A          12.106.32.254
                         IN      AAAA    3ffe:b80:1f8d:1:a00:20ff:fea7:686b
                         IN      MX        5  freebsd.unpbook.com
                         IN      MX        10 mailhost.unpbook.com

     gethostbyname函数

    gethostbyname函数返回主机名对应的IPv4地址
struct hostent *gethostbyname(const char *hostname);
//成功返回非NULL指针,失败返回NULL,同时设置h_errno
struct hostent{
    char *h_name;    //规范主机名
    char **h_aliases;  //别名
    int h_addrtype;    //主机地址类型:AF_INET4
    int h_length;     //地址字节长度:4
    char **h_addr_list;   //映射ip列表
};
    gethostbyname出错不设置errno变量,而是设置全局变量h_errno,有strerror函数将h_errno变量作为唯一参数,返回const char *指针,指向相应错误说明。

    gethostbyaddr函数

    gethostbyaddr函数试图由一个二进制的IP地址得到相应的主机名
#include <netdb.h>
struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family);
//成功返回非NULL指针,失败返回NULL,同时设置h_errno
    这里addr是指向某个in_addr结构的指针;len对于IPv4为4;family为AF_INET

    getservbyname和getservbyport函数

    getservbyname根据给点名字查找相应服务。
#include <netdb.h>
struct servent *getservbyname(const char *hostname, const char *protoname);
//成功返回非空指针,失败返回NULL
struct servent{
    char *s_name;  //正式服务名
    char **s_aliases;  //服务别名
    int s_port;   //端口号(网络字节序)
    char *s_proto;  //协议名称
};
    getservbyport根据给定端口号查找相应服务。
#include<netdb.h>
struct servent *getaddrbyport(int port, const char *protoname);
//成功返回非NULL指针,失败返回NULL
    port参数必须是网络字节序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值