[007]爬虫系列 | DNS篇(一)
一、备注
- 以下所有图片均来自RFC和Wireshark截图
- 报文均由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
3 w w w 5 b a i d u 3 c o m 0 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类型 | 参考 | 描述 和目的 |
| 1 | A | 【RFC1035】 | IPV4地址 |
| 2 | NS | 【RFC1035】 | 名称服务器 |
| 5 | CNAME | 【RFC1035】 | 规范名称;将一个名称映射到另外一个 |
| 6 | SOA | 【RFC1035】 | 授权开始;为区域提供授权信息 |
| 12 | PTR | 【RFC1035】 | 指针;提供地址到(规范)名称的映射 |
| 15 | MX | 【RFC1035】 | 路由交换器;为一个域提供电子邮件处理主机名称 |
| 16 | TXT | 【RFC1035】 【RFC1464】 | 文本;提供各种信息 |
| 28 | AAAA | 【RFC3596】 | IPV6地址 |
| 33 | SRV | 【RFC2782】 | 服务器选择;通用服务的传输点 |
| 35 | NAPTR | 【RFC3403】 | 名称授权指针 |
| 41 | OPT | 【RFC2671】 | 伪RR;支持更大的数据包、标签、RDNS0中的返回码 |
| 251 | IXFR | 【RFC1995】 | 增量区域传输 |
| 252 | AXFR | 【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、参考文献
更多推荐
所有评论(0)