2017-01-31 3 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

관련 문제