2017-11-09 17 views
0

scapy에서 PcapReader로 pcap 파일을 구문 분석하고 있습니다. 그 후 나는 pcap 파일을 지우고 싶다. 그러나이 오류로 인해 짜증 :scapy에서 PcapReader로 구문 분석 한 후 pcap 파일을 삭제하십시오.

OSError: [Errno 26] Text file busy: '/media/sf_SharedFolder/AVB/test.pcap' 

이 내 파이썬 코드 :

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 파일 발생한다고 생각합니다.

누군가 아이디어가 있습니까?

답변

1

문제를 재현 할 수 없어서 Scapy의 최신 개발 버전 (https://github.com/secdev/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') 
+0

scapy 버전 2.3.3.dev862입니다 :

는 작업 코드입니다. lsof는 python과 sh가 파일에 대해 작업하고 있다고 말합니다. – crappidy

+1

그 sh 프로세스는 무엇입니까? 파이썬 프로세스가 스크립트를 실행하는 프로세스인지 확인 했습니까? 스크립트의 코드에'print (os.getpid(), os.getppid())'를 추가하여 PID와 부모의 PID를 얻을 수 있습니다. – Pierre

+0

"lsof"는 스크립트가 "python"(PID 1425) 프로세스와 "sh"(PID 1428) 프로세스로 실행된다고 말합니다. 스크립트의 PID는 1425이고, 부모 PID는 1404입니다. – crappidy

0

해결책을 찾았습니다. 나는 "PcapReader()"에서 "rdpcap()"을 대체했습니다. 파이썬 스크립트가 끝날 때까지 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') 
+0

이 작업은 가능하지만 PCAP 파일이 클 경우 메모리가 고갈되어 큰 파일을 처리 할 수 ​​없음을 유의하십시오. – Pierre

+0

그래, 그런 오류가 있으면 기억할 것입니다. – crappidy