使用Pcapy将数据包保存为pcap文件

1 投票
2 回答
5573 浏览
提问于 2025-04-18 05:59

我发现很多例子是关于如何捕获数据包并从pcap文件中读取数据的。但是没有任何例子是关于如何捕获数据包并把它们保存到pcap文件里的。

我正在使用以下代码,来自这里

import pcapy
from impacket.ImpactDecoder import *

# list all the network devices
pcapy.findalldevs()

max_bytes = 1024
promiscuous = False
read_timeout = 100 # in milliseconds
pc = pcapy.open_live("name of network device to capture from", max_bytes, promiscuous, read_timeout)

pc.setfilter('tcp')

# callback for received packets
def recv_pkts(hdr, data):
  packet = EthDecoder().decode(data)
  print packet

packet_limit = -1 # infinite
pc.loop(packet_limit, recv_pkts) # capture packets

有没有什么想法可以把捕获到的数据包保存到pcap文件里呢?

2 个回答

1

Pcapy确实有一个叫Dumper的对象,但你需要先有一个Reader对象才能创建它,这听起来就很奇怪。

import pcapy as pc
dev = pc.lookupdev()
reader = pc.open_live(dev, 65536, 1, 1)
dumper = reader.dump_open('pcapy_test.pcap')

for _ii in range(2):
    hdr, pkt = reader.next()
    dumper.dump(hdr, pkt)
3

你可以通过调用pcapy中的dump_open来获取一个Dumper对象,然后可以在这个对象上调用dump方法。

dumper = pc.dump_open(filename)
...
dumper.dump(hrd, data)

撰写回答