Scapy:获取DNSQR / DNSRR字段的符号/字符串形式的值

7
我将尝试解码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.qtypeqr.qclass返回枚举的内部int表示(1),而不是符号字符串值(“A”或“IN”)。响应包的DNSRR部分也是如此。如何获得符号形式的DNSQR或DNSRR字段?
1个回答

5

您可以通过调用以下命令获得qr.qtypeqr.qclass的符号字符串值:

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

请注意,您可以提前调用qr.get_field('qtype')qr.get_field('qclass')而不是一遍又一遍地调用它们:
qtype_field = qr.get_field('qtype')
qclass_field = qr.get_field('qclass')
...
qtype_field.i2repr(qr, qr.qtype)
qclass_field.i2repr(qr, qr.qclass)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接