2017-11-09 9 views
0

scapyのPcapReaderでpcapファイルを解析しています。その後、私はpcapファイルを削除したいと思います。しかし、それは、このエラーのため吸う:scapyのPcapReaderで解析した後に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ファイルで発生していると思います。

誰かが考えていますか?

答えて

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') 
+0

scapyバージョン2.3.3.dev862です:

これは、作業コードです。 lsofは、pythonとshがファイルを操作していると言っています。 – crappidy

+1

そのshプロセスとは何ですか? Pythonのプロセスがあなたのスクリプトを実行しているプロセスであることを確認しましたか?スクリプトのコードに 'print(os.getpid()、os.getppid())'を追加して、PIDと親のPIDを取得することができます。 – Pierre

+0

"lsof"は、スクリプトがプロセス "python"(PID 1425)とプロセス "sh"(PID 1428)で動作すると言います。スクリプトのPIDは1425、親PIDは1404です。 – crappidy

0

解決策が見つかりました。私は "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') 
+0

これはうまくいきますが、PCAPファイルが大きい場合、メモリが使い果たされて大容量のファイルを処理できなくなる可能性があります。 – Pierre

+0

このようなエラーが発生した場合は、覚えています。 – crappidy

関連する問題