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

时间:2017-11-09 10:54:36

标签: 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/test.pcap'):
  var.append(packet[Ether].src)

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

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

有人有任何想法吗?

2 个答案:

答案 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')