美文网首页
域名系统

域名系统

作者: cendechen | 来源:发表于2018-11-25 21:01 被阅读0次

    域名系统(DNS)

    DNS 中的条目称为资源记录(RR)

    • A 记录 把一个主机名映射成一个32位的IPv4 地址
    • AAAA 称为“四A”,是映射到一个128位的IPv6
    • PTR 称为“指针记录”的PTR记录把IP地址映射成主机名,对IPv4地址,32位地址的4个字节先反转顺序,每个字节都转换成各自的十进制ASCII,再添上in-addr.arpa,结果字符串用于PTR查询
    • MX MX记录把一个主机指定作为给定主机的“邮件交换器” 当存在多个MX记录时,我们按照优先级顺序使用,值越小优先级越高
    • CNAME 规范名字,它的常见用法是为了常用的服务指派CANME记录

    c库代码

    #include <netdb.h>
    struct hostent * gethostbyname(const char *hostname);  // 把主机名映射成IPv4地址
    struct hostent {
      char *h_name;
      char ** h_aliases;
      int h_addrtype;
      int h_length;
      char ** h_addr_list;
    }
    struct hostent * gethostbyaddr(const char *addr, socklen_t len, int family)  // 把IPv4地址转换为主机名
    // 根据服务名字查询端口
    struct servent {
      char *s_name,
      char **s_aliases,
      int s_port,
      char *s_proto 
    }
    struct servent * getservbyname(const char *servname, const char *protoname);
    struct servent * getservbyport(int port, const char * protoname);
    // ipv6 的地址
    struct addrinfo {
      int ai_flags;
      int ai_family;
      int ai_socktype;
      int ai_protocol;
      socklen_t ai_addrlen;
      char *ai_canonname;
      struct sockaddr * ai_addr;
      struct addrinfo *ai_next;
    }
    int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo, **result);
    int getnameinfo(const struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
    const char * gai_strerror(int error); // 解析getaddrinfo的错误返回码
    void freeaddrinfo(struct addrinfo *al); //  getaddrinfo返回的addrinfo 都是动态返回的
    

    LINUX 系统主机

    文件/etc/resolv.conf通常包含本地名字服务器主机的IP地址

    不可重入函数

    gethostbyname
    gethostbyaddr
    getservbyname
    getservbyport
    // 上述4个函数不可重入,它们都返回指向同一个静态结构的指针
    // 为了支持4个函数的可重入版本,名字都是以_r结尾
    inet_pton
    inet_ntop 
    // 是可重入的
    inet_ntoa // 不可重入
    

    函数图文结构

    信息 数据文件 结构 键值查找函数
    主机 /etc/hosts/ hostent gethostbyaddr、gethostbyname
    网络 /etc/networks netent getnetbyaddr、getnetbyname
    协议 /etc/protocols protoent getprotobyname、getprotobynumber
    服务 /etc/services servent getservbyname、getservbyport

    相关文章

      网友评论

          本文标题:域名系统

          本文链接:https://www.haomeiwen.com/subject/pqrjtqtx.html