Python 为什么DNS响应不同?

Python 为什么DNS响应不同?,python,dns,dig,Python,Dns,Dig,我有python代码 from dns import message, query, flags, rdatatype q = message.make_query("bancontact.node1.web1.prod.kunstmaan.com", rdatatype.NS, want_dnssec=True) q.flags |= flags.AD res = query.udp(q, "170.252.72.92") 和digquery dig bancontact.node1.we

我有python代码

from dns import message, query, flags, rdatatype

q = message.make_query("bancontact.node1.web1.prod.kunstmaan.com", rdatatype.NS, want_dnssec=True)
q.flags |= flags.AD
res = query.udp(q, "170.252.72.92")
dig
query

dig bancontact.node1.web1.prod.kunstmaan.com ns  @170.252.72.92
我向Wireshark检查查询是否相等:

此查询来自
python

0000   4c 17 eb fe 74 00 f0 18 98 74 f9 be 08 00 45 00   L...t....t....E.
0010   00 61 2b 0d 00 00 40 11 9a 71 c0 a8 01 0d aa fc   .a+...@..q......
0020   48 5c d0 42 00 35 00 4d 18 59 7d 2a 01 20 00 01   H\.B.5.M.Y}*. ..
0030   00 00 00 00 00 01 0a 62 61 6e 63 6f 6e 74 61 63   .......bancontac
0040   74 05 6e 6f 64 65 31 04 77 65 62 31 04 70 72 6f   t.node1.web1.pro
0050   64 09 6b 75 6e 73 74 6d 61 61 6e 03 63 6f 6d 00   d.kunstmaan.com.
0060   00 02 00 01 00 00 29 05 00 00 00 80 00 00 00      ......)........
这来自
dig

0000   4c 17 eb fe 74 00 f0 18 98 74 f9 be 08 00 45 00   L...t....t....E.
0010   00 61 c8 9b 00 00 40 11 fc e2 c0 a8 01 0d aa fc   .a....@.........
0020   48 5c d4 49 00 35 00 4d 45 f3 4b fe 01 20 00 01   H\.I.5.ME.K.. ..
0030   00 00 00 00 00 01 0a 62 61 6e 63 6f 6e 74 61 63   .......bancontac
0040   74 05 6e 6f 64 65 31 04 77 65 62 31 04 70 72 6f   t.node1.web1.pro
0050   64 09 6b 75 6e 73 74 6d 61 61 6e 03 63 6f 6d 00   d.kunstmaan.com.
0060   00 02 00 01 00 00 29 10 00 00 00 00 00 00 00      ......)........
区别仅在于标识:
2b 0d
vs
c8 9b
,标头校验和:
9a 71
vs
fc e2
,源端口:
d0 42
vs
d4 49
和事务ID:
18 59 7d 2a
vs
45 f3 4b fe

Query equals,所有标志都等于,但对python代码中的查询的响应:

DNS 119 Standard query response 0x7d2a NS bancontact.node1.web1.prod.kunstmaan.com OPT
与dig对查询的响应不同

DNS 205 Standard query response 0x4bfe NS bancontact.node1.web1.prod.kunstmaan.com CNAME public.node1.web1.prod.kunstmaan.com SOA amrns1501.accenture.com OPT
有人能解释为什么会这样吗


谢谢。

您的查询还有两个不同之处:

  • 从python中可以看到
    0500
    ,从dig中可以看到
    100000
    as“”
  • 从python中设置(
    80 00
    ),从dig中不设置(
    00
  • 因此,服务器无法将整个响应(对python查询)放入1280字节,而只返回空响应

    DIG表示,它最多可以接受4096字节的响应,并且也没有请求DNSSEC RRS,因此答案由服务器提供(如果没有DNSSEC,它甚至可以容纳1280字节)。除此之外,dig将在默认情况下使用tcp重试,以防它收到对初始udp查询的截断响应

    与python相比,此dig查询应产生相同的服务器查询和服务器响应(空):

    dig bancontact.node1.web1.prod.kunstmaan.com ns  @170.252.72.92 +bufsize=1280 +dnssec +ignore +nocookie