【问题标题】:scapy: get DNSQR / DNSRR field values in symbolic/string formscapy:以符号/字符串形式获取 DNSQR / DNSRR 字段值
【发布时间】:2017-01-05 17:13:08
【问题描述】:

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

一个代码sn-p:

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 字段?

【问题讨论】:

    标签: python dns scapy


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2020-02-24
      • 2016-02-20
      • 2011-10-25
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多