scapy:以符号/字符串形式获取DNSQR/DNSRR字段值

2024-06-28 19:51:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解码DNS流量和打印查询/响应数据,并使用python/scapy对数据包进行解码。在

代码片段:

def dns_sniff_v2(pkt):
    if IP in pkt:
        if pkt.haslayer(DNS):
            dns = pkt.getlayer(DNS)
            pkt_time = pkt.sprintf('%sent.time%')

            if pkt.haslayer(DNSQR):
                qr = pkt.getlayer(DNSQR) # DNS query
                values = [ pkt_time, str(ip_src), str(ip_dst), str(dns.id), str(qr.qname), str(qr.qtype), str(qr.qclass) ]

            print "|".join(values)

sniff(iface="eth0", filter="port 53", prn=dns_sniff_v2, store=0)

问题是qr.qtype或{}给我的是枚举的内部int表示(1),而不是符号字符串值(“A”或“IN”)。这同样适用于响应包的DNSRR部分。在

如何获得符号形式的DNSQR或DNSRR字段?在


Tags: ipiftimedns解码v2qrvalues
1条回答
网友
1楼 · 发布于 2024-06-28 19:51:01

您可以通过调用以下命令获得qr.qtype和{}的符号字符串值:

qr.get_field('qtype').i2repr(qr, qr.qtype)
qr.get_field('qclass').i2repr(qr, qr.qclass)

请注意,不要反复调用qr.get_field('qtype')qr.get_field('qclass'),而是可以提前调用一次:

^{pr2}$

相关问题 更多 >