Python 2.7 在scapy中使用PcapReader解析pcap文件后删除该文件
我正在用scapy中的PcapReader解析一个pcap文件。之后,我想删除pcap文件。但由于这个错误,它很糟糕:Python 2.7 在scapy中使用PcapReader解析pcap文件后删除该文件,python-2.7,scapy,pcap,Python 2.7,Scapy,Pcap,我正在用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/te
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的最新开发版本(从),因为我无法用它重现您的问题
如果不起作用,请使用lsof/media/sf_SharedFolder/AVB/test.pcap检查是否有其他程序打开了您的捕获文件。如果是这样,试着找到(如果可能的话,杀死)那个程序
您可以尝试两种不同的破解方法,以了解到底发生了什么:
测试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')
scapy版本是2.3.3.dev862。lsof说,python和sh正在处理该文件。sh过程是什么?您是否检查过python进程是运行您的脚本的进程?您可以将
print(os.getpid(),os.getppid())
添加到脚本的代码中,以获取其PID及其父级PID。“lsof”表示脚本使用进程“python”(PID 1425)和进程“sh”(PID 1428)运行。脚本的PID是1425,父PID是1404。所以您需要找到1428是什么,因为它可能是导致此错误的进程ps-ef | grep 1428
获取其命令行?“lsof”提供进程“sh”的PID。但是我应该如何编写代码,以便命令“ps-ef | grep PID_of_sh”使用进程“sh”的PID?类似于“foo=lsof test.pcap的第二个PID”,然后是“ps-ef | grep foo”。这是可行的,但请注意,如果pcap文件很大,可能会耗尽内存(因此无法处理大文件)