Nano Hash - криптовалюты, майнинг, программирование

Удалить файл pcap после его анализа с помощью PcapReader в scapy

Я анализирую файл pcap с помощью PcapReader в scapy. После этого я хочу удалить файл 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.

У кого-нибудь есть идеи?

09.11.2017

Ответы:


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')
09.11.2017
  • версия скапи 2.3.3.dev862. lsof говорит, что python и sh работают с файлом. 09.11.2017
  • Что это за процесс? Вы проверили, что процесс python запускает ваш скрипт? Вы можете добавить print(os.getpid(), os.getppid()) в код своего скрипта, чтобы получить его PID и PID родителя. 09.11.2017
  • lsof говорит, что скрипт работает с процессом python (PID 1425) и процессом sh (PID 1428). PID скрипта — 1425, PID родителей — 1404. 09.11.2017
  • Хорошо, поэтому вам нужно найти, что такое 1428, потому что это может быть процесс, ответственный за эту ошибку. ps -ef | grep 1428 чтобы получить его командную строку? 10.11.2017
  • lsof дает мне PID процесса sh. Но как мне написать код, чтобы команда ps -ef | grep PID_of_sh использует PID процесса sh? Что-то вроде foo = второй PID lsof test.pcap, а затем ps -ef | грэп фу. 10.11.2017

  • 2

    Решение найдено. Я заменил "PcapReader()" на "rdpcap()". Похоже, что 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')
    
    09.11.2017
  • Это работает, но обратите внимание, что если ваш файл PCAP большой, вы можете исчерпать свою память (и, следовательно, не сможете обрабатывать большие файлы). 10.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..