2017-01-31 7 views
1

Scapyで構築されたDNSパケットスニッファを使用して、パケットデータを格納します。scapyパケットデータの保存方法は?

私は、パケットデータが辞書として格納されていることを理解しています。これは別の辞書または配列に格納するのが理想的です。私はpkt [0] .summaryを使ってデータが正しいことを知ることができ、パケットを取得していますが、正しく格納する方法がわかりません。

私はPython/Scapyに慣れていないので、私の質問は、このパケットデータを辞書や配列に格納する方法です。

これは、コードは次のようになります。

#!/usr/bin/env python 

from scapy.all import * 
from datetime import datetime 
import time 
import datetime 
import sys 

# Select interface and ports of interest 
interface = 'ens33' 
bpf = 'udp and port 53' 

# SELECT/FILTER MSGS 
def select_DNS(pkt): 
    pkt_time = pkt.sprintf('%sent.time%') 


# SELECT/FILTER DNS MSGS 
    try: 

     dict = [] 

     # queries 
     if DNSQR in pkt and pkt.dport == 53: 
      domain = pkt.getlayer(DNS).qd.qname.decode() # .decode() gets rid of the b'' 
      print('Q - Time: ' + pkt_time + ' , source IP: ' + pkt[IP].src + ' , domain: ' + domain) 

     # responses 
     elif DNSRR in pkt and pkt.sport == 53: 
      domain = pkt.getlayer(DNS).qd.qname.decode() 
      print('R - Time: ' + pkt_time + ' , source IP: ' + pkt[IP].src + ' , domain: ' + domain) 

    except: 
     pass 

# START SNIFFER 
sniff(iface=interface, filter=bpf, store=0, prn=select_DNS) 

答えて

1

私はそれが機能(スライス表記をオーバーライド)のようないくつかの辞書を提供していても、パケット構造が辞書ではないかなり確信しています。

パケットをlist(アレイ)に保存する場合は、パケットを追加するだけです。

cache = [] 
def select_DNS(pkt): 
    cache.append(pkt) 

あなたがディスクにパケットを格納したい場合は、私が「PCAP」形式で保存するwrpacp functionを使用してそれらを書き出すことをお勧め。

wrpcap("temp.cap",pkts) 
+0

ありがとう、完璧に働いています! – arcade16

関連する問題