代码之家  ›  专栏  ›  技术社区  ›  crappidy

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

  •  0
  • crappidy  · 技术社区  · 7 年前

    我正在用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')
    

    有人知道吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Pierre    7 年前

    您可能想试用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')
    
        2
  •  0
  •   crappidy    7 年前

    找到了解决方案。我将“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')