DNS报文分析

6 篇文章 0 订阅
2 篇文章 0 订阅

Header各字段分别解释如下:

  • ID 请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回 来,这样请求客户端就可以区分不同的请求应答了。
  • QR 1个比特位用来区分是请求(0)还是应答(1)。
  • OPCODE 4个比特位用来设置查询的种类,应答的时候会带相同值,可用的值如下:
    • 0 标准查询 (QUERY)
    • 1 反向查询 (IQUERY)
    • 2 服务器状态查询 (STATUS)
    • 3-15 保留值,暂时未使用
  • AA 授权应答(Authoritative Answer) - 这个比特位在应答的时候才有意义,指出给 出应答的服务器是查询域名的授权解析服务器。 注意因为别名的存在,应答可能存在多个主域名,这个AA位对应请求名,或 者应答中的第一个主域名。
  • TC 截断(TrunCation) - 用来指出报文比允许的长度还要长,导致被截断。
  • RD 期望递归(Recursion Desired) - 这个比特位被请求设置,应答的时候使用的相 同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的 支持是可选的。
  • RA 支持递归(Recursion Available) - 这个比特位在应答中设置或取消,用来代表服 务器是否支持递归查询。
  • Z 保留值,暂时未使用。在所有的请求和应答报文中必须置为0。
  • RCODE 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:
    • 0 没有错误。
    • 1 报文格式错误(Format error) - 服务器不能理解请求的报文。
    • 2 服务器失败(Server failure) - 因为服务器的原因导致没办法 处理这个请求。
    • 3 名字错误(Name Error) - 只有对授权域名解析服务器有意义, 指出解析的域名不存在。
    • 4 没有实现(Not Implemented) - 域名服务器不支持查询类型。
    • 5 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答。比如, 服务器不希望对某些请求者给出应答,或者服务器不希望进 行某些操作(比如区域传送zone transfer)。
    • 6-15 保留值,暂时未使用。
  • QDCOUNT 无符号16位整数表示报文请求段中的问题记录数。
  • ANCOUNT 无符号16位整数表示报文回答段中的回答记录数。
  • NSCOUNT 无符号16位整数表示报文授权段中的授权记录数。
  • ARCOUNT 无符号16位整数表示报文附加段中的附加记录数。

Question各字段分别解释如下:

  • QNAME 域名被编码为一些labels序列,每个labels包含一个字节表示后续字符串长度,以及这个字符串,以0长度和空字符串来表示域名结束。注意这个字段可能为奇数字节,不需要进行边界填充对齐。
  • QTYPE 2个字节表示查询类型,.取值可以为任何可用的类型值,以及通配码来表示所有的资源记录。
  • QCLASS 2个字节表示查询的协议类,比如,IN代表Internet。

资源记录格式(Resource record):
  应答,授权,附加段都共用相同的格式:多个资源记录,资源记录的个数由报文头段中对应的几个数值确定,每个资源记录格式如下:

  • NAME 资源记录包含的域名
  • TYPE 2个字节表示资源记录的类型,指出RDATA数据的含义
  • CLASS 2个字节表示RDATA的类
  • TTL 4字节无符号整数表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存。
  • RDLENGTH 2个字节无符号整数表示RDATA的长度
  • RDATA 不定长字符串来表示记录,格式根TYPE和CLASS有关。比如,TYPE是A,CLASS 是 IN,那么RDATA就是一个4个字节的ARPA网络地址。

报文压缩
  为了减小报文,域名系统使用一种压缩方法来消除报文中域名的重复。使用这种方法,后面重复出现的域名或者labels被替换为指向之前出现位置的指针。 指针占用2个字节,前两个比特位都为1。因为lablels限制为不多于63个字节,所以label的前两位一定为0,这样就可以让指针与label进行区分。(10 和 01 组合保留,以便日后使用) 。偏移值(OFFSET)表示从报文开始的字节指针,偏移量为0表示ID字段的第一个字节。 压缩方法让报文中的域名成为: 以0结尾的labels序列 - 一个指针 - 指针结尾的labels序列。指针只能在域名不是特殊格式的时候使用,否则域名服务器或解析器需要知道资源记录的格式。目前还没有这种情况,但是以后可能会出现。 如果报文中的域名需要计算长度,并且使用了压缩算法,那么应该使用压缩后的长度,而不是压缩前的长度。 程序可以自由选择是否使用指针,虽然这回降低报文的容量,而且很容易产生截断。不过所有的程序都应该能够理解收到的报文中包含的指针。

eg: A查询   
dig   www.baidu.com   A
请求报文:
a4 bb 01 20 00 01 00 00 00 00 00 01 03 77 77 77            ... .... .....www
05 62 61 69 64 75 03 63 6f 6d 00 00 01 00 01 00            .baidu.c om......
00 29 10 00 00 00 00 00 00 00                              .)...... ..

Flags: 0x0120 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)
	.... .... ..1. ....          = AD bit: Set
	.... .... ...0 ....          = Non-authenticated data: Unacceptable
        
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 1

Queries:
	Name: www.baidu.com             0x03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 00
	Type: A (Host Address) (1)      0x00 01
	Class: IN (0x0001)              0x00 01
应答报文:
a4 bb 81 80 00 01 00 03 00 00 00 00 03 77 77 77              ........ .....www
05 62 61 69 64 75 03 63 6f 6d 00 00 01 00 01 c0              .baidu.c om......
0c 00 05 00 01 00 00 04 0a 00 0f 03 77 77 77 01               ........ ....www.
61 06 73 68 69 66 65 6e c0 16 c0 2b 00 01 00 01               a.shifen ...+....
00 00 00 d5 00 04 dc b5 26 96 c0 2b 00 01 00 01               ........ &..+....
00 00 00 d5 00 04 dc b5 26 95                                 ........ &.

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:
	Name: www.baidu.com 0x03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 00
	Type: A (Host Address) (1) 0x00 01
	Class: IN (0x0001) 0x00 01

Answers:
	www.baidu.com: type CNAME, class IN, cname www.a.shifen.com
		Name: www.baidu.com                                        0xc00c 报文压缩 1100 0000 0000 1100 偏移12字节
		Type: CNAME (Canonical NAME for an alias) (5)              0x0005
		Class: IN                                                  0x0001
		Time to live: 1034 (17 minutes, 14 seconds)                0x0000040a
		Data length: 15                                            0x000f
		CNAME: www.a.shifen.com                                    0x03 77 77 77 01 61 06 73 68 69 66 65 6e c0 16
	
	www.a.shifen.com: type A, class IN, addr 220.181.38.150
		Name: www.a.shifen.com                                     0xc02b 偏移43字节
		Type: A (Host Address) (1)
		Class: IN (0x0001)
		Time to live: 213 (3 minutes, 33 seconds)
		Data length: 4
		Address: 220.181.38.150
	
	www.a.shifen.com: type A, class IN, addr 220.181.38.149
		Name: www.a.shifen.com
		Type: A (Host Address) (1)
		Class: IN (0x0001)
		Time to live: 213 (3 minutes, 33 seconds)
		Data length: 4
		Address: 220.181.38.149
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值