tcpdump dns输出代码

捕获在名称服务器上:

21:54:35.391126 IP resolver.7538 > server.domain: 57385% [1au] A? www.domain.de. (42) 

57385%的百分数是什么意思? 据我可以看到57385是客户端序列号,一个加号将意味着RD位设置。

第二个问题:ARCOUNT在查询中做了什么? 据我了解tcpdump手册页的[1au]意味着tcpdump将此视为协议exception – 我也是如此。我在很多查询看到这一点。

阅读源卢克:)

从tcpdump / print-domain.c:

 printf("%d%s%s%s", EXTRACT_16BITS(&np->id), ns_ops[DNS_OPCODE(np)], DNS_RD(np) ? "+" : "", DNS_CD(np) ? "%" : ""); 

所以%表示“检查禁用”,这是我对RFC4035的理解,表明parsing器不强制服务器上的RR的身份validation。

从bind / lib / bind / resolv / res_mkquery.c:

 int res_nopt(res_state statp, int n0, /*%< current offset in buffer */ u_char *buf, /*%< buffer to put query */ int buflen, /*%< size of buffer */ int anslen) /*%< UDP answer buffer size */ { [...] hp->arcount = htons(ntohs(hp->arcount) + 1); 

根据RFC2671 ,parsing器包含附加数据是完全合法的,并且这将UDP数据包的大小提高到512字节的限制以上。 所以拉达达达的假设在这方面是正确的。

感谢您的时间和遗憾,我之前没有阅读过来源。

数字57385实际上是查询ID,而不是序列号。 实际上,序列号只存在于TCP中,并且是UDP。 查询ID是必需的,这样如果两个查询同时进行,客户端可以分开两个答案。

查询中的[1au]似乎与OPT UDPsize=4096 ,这向服务器表明客户端可以处理高达4096字节的响应。 在我的testing中,我总是find这两个。 没有-vv选项,你不会得到额外的OPT UDPsize=4096

最初的DNS响应只能是512个字节,如果响应时间比这个长,那么只有前512个字节被发送,而且有一点被设置为表示答案已被截断。 客户端通过TCP进行后续查询,以便可以传输整个响应。 由于IPv6logging现在比IPv4logging长得多,所以需要更大的响应,并且为了避免总是使用TCP,向DNS添加了扩展以允许更大的响应。

我运行我自己的tcpdump,直到我的输出中有一个%符号。 使用-vv和-n选项,只查看查询,这是我得到的:

  192.168.1.42.60121 > 8.8.4.4.53: [bad udp cksum 92ce!] 57372+ [1au] MX? blah.com. ar: . OPT UDPsize=4096 OK (37) 21:40:37.185712 IP (tos 0x0, ttl 64, id 19492, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.20518 > 8.8.4.4.53: [bad udp cksum d7d9!] 43610+% [1au] A? ns1.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.185867 IP (tos 0x0, ttl 64, id 19493, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.15605 > 8.8.4.4.53: [bad udp cksum e0b2!] 51586+% [1au] AAAA? ns1.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186023 IP (tos 0x0, ttl 64, id 19494, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.34562 > 8.8.4.4.53: [bad udp cksum 4a5d!] 61450+% [1au] A? ns2.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186177 IP (tos 0x0, ttl 64, id 19495, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.56713 > 8.8.4.4.53: [bad udp cksum 5dd1!] 2672+% [1au] AAAA? ns2.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186327 IP (tos 0x0, ttl 64, id 19496, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.14021 > 8.8.4.4.53: [bad udp cksum 60f3!] 43568+% [1au] A? ns3.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186483 IP (tos 0x0, ttl 64, id 19497, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.22412 > 8.8.4.4.53: [bad udp cksum 4bca!] 38782+% [1au] AAAA? ns3.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186639 IP (tos 0x0, ttl 64, id 19498, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.50256 > 8.8.4.4.53: [bad udp cksum 6a0e!] 411+% [1au] A? ns4.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 21:40:37.186785 IP (tos 0x0, ttl 64, id 19499, offset 0, flags [none], proto UDP (17), length 74) 192.168.1.42.3213 > 8.8.4.4.53: [bad udp cksum adcb!] 57626+% [1au] AAAA? ns4.acotel.net.br. ar: . OPT UDPsize=4096 OK (46) 

请求blah.com的MXlogging时,我得到一个SERVFAIL。 当我申请blah.com的NSlogging时,我会看到四个可以看到有%符号的域。 据推测,一些客户端或parsing库(可能bind9)跟随一个SERVFAIL请求NSlogging。 我发现在查找blah.com的MXlogging时这是一致的,并且我看到了与其他域相同的模式。 我的猜测是%符号表示这是一个不是由客户启动的子查询,但是必须返回一个答案。

我确信tcpdump不知道在后台做了什么绑定,所以我期望在查询中必须有一个标志设置,使得tcpdump把这个标志放在这里。 稍后我可能会看看-x选项,看看是否可以找出它是什么。