tcpdump dns 输出代码

tim*_*tim 6 domain-name-system tcpdump

在名称服务器上捕获:

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

57385% 中的百分号是什么意思?据我所知 57385 是客户端序列号,加号表示设置了 RD 位。

第二个问题:ARCOUNT 在查询中做了什么?据我了解 tcpdump 手册页 [1au] 意味着 tcpdump 将此视为协议异常 - 就像我一样。我在很多查询中都看到了这一点。

tim*_*tim 6

阅读来源卢克:)

来自 tcpdump/print-domain.c:

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

因此 % 表示“检查已禁用”,根据我对RFC4035的理解,这表明解析器未强制对服务器上的 RR 进行身份验证。

来自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);
Run Code Online (Sandbox Code Playgroud)

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

感谢您的宝贵时间,抱歉我之前没有阅读来源......