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

标签 python dns scapy

我正在尝试解码 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",或“在”)。响应包的DNSRR部分也是如此。

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

最佳答案

您可以通过调用以下命令获取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)

关于python - scapy:以符号/字符串形式获取 DNSQR/DNSRR 字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490875/

相关文章:

Java DNS 缓存大小

PHP 从字符串中删除域名扩展

python /Scapy : sniff only incoming packets

python - scapy 中未定义名称 'raw'

python - 调用函数出错

python - 在Google App Engine邮件API中设置背景图像

python - undefined symbol : _ZN2cv3Mat10deallocateEv

php - 使用 PHP 查看域是否正在使用或注册的快速方法

Python - 库问题

python - Pandas:在 groupby 和 value_counts 上生成列