一、备注

  1. 以下所有图片均来自RFC和Wireshark截图
  2. 报文均由WireShark抓取所得

二、DNS主要组成

Header

头部

Question 

DNS请求

Answer 

回答请求的资源记录

Authority 

指向域的资源记录

Additional

其他资源记录

 

三、头部格式

3.1头部格式

3.2描述

ID(16 bit)由客户端设置。服务器返回。客户端用它来匹配响应 与查询
QR查询(0)/响应(1)
OPCODE(4 bit)0(标准查询),其他值:4(通知),5(更新),其他值(1-3)弃用的,运作 过程中不会出现
AA  只在响应消息中有效,与缓存回答相对
TC在使用UDP时,标示这条消息是否因为长度超过UDP数据包的标准长度512字节,如果超过512字节,该位被设置为1
RD是否递归查询。1=>收到请求的域名服务器会递归查询域名

注意:该位为1,域名服务器不一定会做递归查询,取决于域名服务器是否支持递归查询。
Z必须为0,为将来使用而保留
RA  响应消息中清除并设置。标示该DNS域名服务器是否支持递归查询。
RCODE 

只在响应消息中有效,标示响应消息的类型:

0 【RFC1035】 成功的响应

1 【RFC1035】 格式错误--域名服务器无法解析请求

2 【RFC1035】 服务器失效-域名服务器因为内部错误无法解析该请求

3 【RFC1035】 不存在域名-引用未知域名

4 【RFC1035】 Not Implemented--域名服务器不支持请求的类型

5 【RFC1035】 Refused -- 域名服务器因为策略的原因拒绝执行请求的操作。例如域名服务器不会为特定的请求者返回查询结果,或者域名服务器不会为特定的请求返回特定的数据

6 【RFC2136】 名称存在但不应该存在(用于更新)

7 【RFC2136】 RRSet存在但不应该存在(用于更新)

8 【RFC2136】 RRSet不存在但应该存在(用于更新)

9 【RFC2136】服务器不应该为改区域授权(用于更新)

10 【RFC2136】在区域中不包含名称(用于更新)

QDCOUNT标示请求部分的条目数(16位无符号整数类型)
ANCOUNT  标示响应部分的资源记录数。如果响应消息中没有记录,则设置为0(16位无符号整数类型)
NSCOUNT  标示权威部分的域名服务器资源记录数。如果响应消息中没有权威记录,则设置为0(16位无符号整数类型)
ARCOUNT 标示额外部分的资源记录数。(16位无符号整数类型)

3.3抓包验证

这里以百度为例:

 以上得出:

1、ID

2、

Query:

 Response:

3、

 

四、请求部分格式

4.1请求格式

备注:不包含TTL,因为它是不被缓存的(查询字段) 

4.2描述

QNAME查询名称(可变) DNS更新的区域类型
QTYPE查询类型(16位) DNS更新的区域类型
QCLASS查询类(16位) DNS更新的区域类

4.3抓包验证

注意:

请求的域名中没有“.”,域名中的“.”被编码为元信息

例如(上图): 03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 00

3www5baidu3com0

3\5\3表示的是后面标签的长度!!!

备注:每个标签的长度必须在0-63之间,因为标签(长度)限于63字节。

Query全部报文如下:

# query
Frame 212: 73 bytes on wire (584 bits), 73 bytes captured (584 bits) on interface 0
Ethernet II, Src: IntelCor_8f:39:aa (0c:54:15:8f:39:aa), Dst: Tp-LinkT_53:93:1a (f4:83:cd:53:93:1a)
Internet Protocol Version 4, Src: 192.168.0.111, Dst: 192.168.1.1
User Datagram Protocol, Src Port: 50811, Dst Port: 53
Domain Name System (query)
    Transaction ID: 0xb62f
    Flags: 0x0100 Standard query
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... .0.. .... = Z: reserved (0)
        .... .... ...0 .... = Non-authenticated data: Unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.baidu.com: type A, class IN
            Name: www.baidu.com
            [Name Length: 13]
            [Label Count: 3]
            Type: A (Host Address) (1)
            Class: IN (0x0001)
    [Response In: 223]

五、响应部分格式

5.1响应格式

 5.2描述

NAME(可变)资源数据对应的域名
TYPE(16位)指定为RR类型代码中的一个
CLASS(16位)

对于互联网数据来说,类字段是1(

     1=>互联网类  254=>没有类  255=>所有类

)

TTL(32位)RR可以被缓存的秒数
RDENGTH(16位)资源长度(字节数)
RDATA(16位)数据格式取决于类型

 5.3抓包验证

5.3.1资源记录类型(常用):

RR类型参考描述 和目的
1A【RFC1035】IPV4地址
2NS【RFC1035】名称服务器
5CNAME【RFC1035】规范名称;将一个名称映射到另外一个
6SOA【RFC1035】授权开始;为区域提供授权信息
12PTR【RFC1035】指针;提供地址到(规范)名称的映射
15MX【RFC1035】路由交换器;为一个域提供电子邮件处理主机名称
16TXT

【RFC1035】

【RFC1464】

文本;提供各种信息
28AAAA【RFC3596】IPV6地址
33SRV【RFC2782】服务器选择;通用服务的传输点
35NAPTR【RFC3403】名称授权指针
41OPT【RFC2671】伪RR;支持更大的数据包、标签、RDNS0中的返回码
251IXFR【RFC1995】增量区域传输
252AXFR

【RFC1035】

【RFC5936】

完全区域传输;通过TCP运载
255(ANY)【RFC1035】请求任意记录

上面Response报文如下 :

# response
Frame 223: 135 bytes on wire (1080 bits), 135 bytes captured (1080 bits) on interface 0
Ethernet II, Src: Tp-LinkT_53:93:1a (f4:83:cd:53:93:1a), Dst: IntelCor_8f:39:aa (0c:54:15:8f:39:aa)
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.0.111
User Datagram Protocol, Src Port: 53, Dst Port: 50811
Domain Name System (response)
    Transaction ID: 0xb62f
    Flags: 0x8180 Standard query response, No error
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .0.. .... .... = Authoritative: Server is not an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... ...0 .... = Non-authenticated data: Unacceptable
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 3
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.baidu.com: type A, class IN
            Name: www.baidu.com
            [Name Length: 13]
            [Label Count: 3]
            Type: A (Host Address) (1)
            Class: IN (0x0001)
    Answers
        www.baidu.com: type CNAME, class IN, cname www.a.shifen.com
            Name: www.baidu.com
            Type: CNAME (Canonical NAME for an alias) (5)
            Class: IN (0x0001)
            Time to live: 134
            Data length: 18
            CNAME: www.a.shifen.com
        www.a.shifen.com: type A, class IN, addr 14.215.177.39
            Name: www.a.shifen.com
            Type: A (Host Address) (1)
            Class: IN (0x0001)
            Time to live: 134
            Data length: 4
            Address: 14.215.177.39
        www.a.shifen.com: type A, class IN, addr 14.215.177.38
            Name: www.a.shifen.com
            Type: A (Host Address) (1)
            Class: IN (0x0001)
            Time to live: 134
            Data length: 4
            Address: 14.215.177.38
    [Request In: 212]
    [Time: 0.107452000 seconds]

里面有些解析不是那么详细的,后面会继续写!!!

6、参考文献

【RFC1035】:https://www.rfc-editor.org/rfc/rfc1035.txt

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐