[英]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.