簡體   English   中英

如何存儲scapy數據包數據?

[英]How to store scapy packet data?

我有一個用 Scapy 構建的 DNS 數據包嗅探器,我想從中存儲數據包數據。

我知道數據包數據存儲為字典,這應該使它非常適合存儲在另一個字典或數組中。 我可以看到使用 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)

我相當確定數據包結構不是字典,即使它提供了一些類似字典的功能(覆蓋切片符號)。

如果您想將數據包存儲在list (數組)中,只需隨時添加它們即可。

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

如果你想將數據包存儲到磁盤,我建議使用wrpacp函數將它們寫出來,以“pcap”格式保存它們。

wrpcap("temp.cap",pkts)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM