我在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文件都会出现此错误。
有人有任何想法吗?
答案 0 :(得分:1)
您可能想尝试使用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')
答案 1 :(得分:0)
找到解决方案。我通过“rdpcap()”替换了“PcapReader()”。好像PcapReader在python脚本完成之前一直打开。
这是工作代码:
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')