在 scapy 中使用 PcapReader 解析后删除 pcap 文件

Delete pcap file after parsing it with PcapReader in scapy

我正在用 scapy 中的 PcapReader 解析一个 pcap 文件。之后我想删除 pcap 文件。但由于这个错误,它很糟糕:

OSError: [Errno 26] Text file busy: '/media/sf_SharedFolder/AVB/test.pcap'

这是我的 python 代码:

from scapy.all import *
import os

var = []

for packet in PcapReader('/media/sf_SharedFolder/AVB/test.pcap'):
  var.append(packet[Ether].src)

os.remove('/media/sf_SharedFolder/AVB/test.pcap')

我认为任何 pcap 文件都会出现此错误。

有人知道吗?

您可能想尝试使用 Scapy 的最新开发版本(来自 https://github.com/secdev/scapy),因为我无法用它重现您的问题。

如果这不起作用,请检查 lsof /media/sf_SharedFolder/AVB/test.pcap(以 root 身份)是否有其他程序打开了您的捕获文件。如果是这样,请尝试找到(并杀死,如果可能)该程序。

您可以尝试两种不同的破解方法,试图找出到底发生了什么:

测试 1:等待。

from scapy.all import *
import os
import time

var = []

for packet in PcapReader('/media/sf_SharedFolder/AVB/test.pcap'):
    var.append(packet[Ether].src)

time.sleep(2)
os.remove('/media/sf_SharedFolder/AVB/test.pcap')

测试 2:明确关闭。

from scapy.all import *
import os

var = []

pktgen = PcapReader('/media/sf_SharedFolder/AVB/test.pcap')
for packet in pktgen:
    var.append(packet[Ether].src)

pktgen.close()
os.remove('/media/sf_SharedFolder/AVB/test.pcap')

找到解决方案。我将 "PcapReader()" 替换为 "rdpcap()"。在 python 脚本完成之前,PcapReader 似乎一直处于打开状态。

这是工作代码:

from scapy.all import *
import os

var = []

p=rdpcap('/media/sf_SharedFolder/AVB/test.pcap')

for packet in p:
  var.append(packet[Ether].src)

os.remove('/media/sf_SharedFolder/AVB/test.pcap')