【问题标题】:Python library to parse DNS from Wireshark capture file pcap从 Wireshark 捕获文件 pcap 解析 DNS 的 Python 库
【发布时间】:2016-09-05 12:58:24
【问题描述】:

我从 Python 开始。 我有一个 Wireshark 捕获的 .pcap 文件,其中包含 DNS 查询和响应。我需要打开这个文件并提取请求的主机名和返回的记录类型和 IP 地址。 我找到了几个能够读取 pcap 文件的库,但我不知道哪一个最适合这个。你能推荐一些东西吗?

【问题讨论】:

    标签: python dns pcap


    【解决方案1】:

    Scapy 不错。

    from scapy.all import *
    from scapy.layers.dns import DNS, DNSQR
    
    types = {0: 'ANY', 255: 'ALL',1: 'A', 2: 'NS', 3: 'MD', 4: 'MD', 5: 'CNAME',
             6: 'SOA', 7:  'MB',8: 'MG',9: 'MR',10: 'NULL',11: 'WKS',12: 'PTR',
             13: 'HINFO',14: 'MINFO',15: 'MX',16: 'TXT',17: 'RP',18: 'AFSDB',
             28: 'AAAA', 33: 'SRV',38: 'A6',39: 'DNAME'}
    
    dns_packets = rdpcap('file.pcap')
    for packet in dns_packets:
        if packet.haslayer(DNS):
            print(packet.show())
            dst = packet[IP].dst
            rec_type = packet[DNSQR].qtype
            print(dst, types[rec_type])
    

    输出示例:

    ###[ Ethernet ]###
      dst       = 00:16:e3:19:27:15
      src       = 00:04:76:96:7b:da
      type      = 0x800
    ###[ IP ]###
         version   = 4L
         ihl       = 5L
         tos       = 0x0
         len       = 70
         id        = 0
         flags     = DF
         frag      = 0L
         ttl       = 64
         proto     = udp
         chksum    = 0xb753
         src       = 192.168.1.2
         dst       = 192.168.1.1
         \options   \
    ###[ UDP ]###
            sport     = 2128
            dport     = domain
            len       = 50
            chksum    = 0x8397
    ###[ DNS ]###
               id        = 12575
               qr        = 0L
               opcode    = QUERY
               aa        = 0L
               tc        = 0L
               rd        = 1L
               ra        = 0L
               z         = 0L
               ad        = 0L
               cd        = 0L
               rcode     = ok
               qdcount   = 1
               ancount   = 0
               nscount   = 0
               arcount   = 0
               \qd        \
                |###[ DNS Question Record ]###
                |  qname     = '2.1.168.192.in-addr.arpa.'
                |  qtype     = PTR
                |  qclass    = IN
               an        = None
               ns        = None
               ar        = None
    
    ('192.168.1.1', 'PTR')
    

    最后一行是传出 IP 地址和记录类型。有一堆数据,随便选你需要的。

    【讨论】:

    • 谢谢。甚至示例:O 那太棒了
    • 我找不到任何关于 scapy 的函数和类的文档。例如,我不知道数据包对象具有什么属性。在官方网站上,只有如何解决某些任务的示例,但没有真正的文档。有没有更好的文档库?
    • 我要使用dpkt,它有API参考,虽然不完整,但至少有点。我不想在 stackoverflow 上变得可靠,并询问有关每个函数或对象或特定任务的问题。
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 2012-04-29
    • 2015-01-14
    • 2016-04-07
    • 2017-01-24
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多