DNS标准允许每个查询指定超过1个问题(我的意思是在单个DNS数据包中)。我正在编写用于DNS Analyzis的Snort插件,我需要测试它在包含多个问题的DNS查询时的行为是否正常。
DNS数据包结构看起来像:
0 1 2 3 4 5 6 7 8 9 A B C D E F
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| <ACTUAL QUESTIONS GO HERE> |
| |
| ... |
| |
因此,如果QDCOUNT
大于1,则单个查询中可能会有多个DNS问题。
如何使用Linux工具执行此类查询?dig domain1.example domain2.example
仅创建2个单独的查询,每个查询每个问题。host
和nslookup
似乎允许当时仅查询1个名称。
有关全部详细信息,请参见此问题:请求A和AAAA记录单个DNS查询
简而言之,实际上今天没有人在一个查询中执行多个问题。这从来没有被清楚地定义,并且提出了很多问题(例如:只有一个返回代码,如果一个人失败而不是另一个问题,您将为2个问题做什么?)。
同时进行A
和AAAA
查询(而不是弃用的 ANY
)是有用的,但是今天基本上不存在。
您可以使用单个AXFR
请求从区域中检索所有记录,然后解析您想要的。
dig @127.0.0.1 domain.com. AXFR
或
nslookup -query=AXFR domain.com 127.0.0.1
通常拒绝AXFR
请求,除了从服务器服务器,因此您需要使用允许提出此请求的IPS。(在绑定中,这是使用allow-transfer
选项完成的)。
这对OP的用例不适用于制作检查QDCount的Snort插件,但它确实解决了在单个DNS请求中发送多个问题的问题。
来源:ServerFault:如何从DNS请求/获取所有记录?