使用 scapy 检查 DNS 记录中是否存在字段

Check if field exists in DNS record using scapy

我正在使用 scapy 解析 DNS 数据包。并非所有 DNS 应答记录都包含所有字段。例如,有些答案没有 rdata,所以

answer = packet.an[0].rdata

导致错误:

AttributeError: rdata

有没有一种方法可以测试答案记录中是否存在 rdata 字段?我知道你可以检查图层

if packet.haslayer(DNS):
    <code>

所以你不会要求不存在的图层。层内字段是否有平行?

你总是可以试试 try-except。不过,可能没有您要找的那么光滑。

try:
   answer = packet.an[0].rdata
except AttributeError:
   # do something