2017-04-25 10 views
0

私はNICからのトラフィックを連続的にキャプチャするredhatサーバ上にtcpdumpプロセスを持っています。 tcpdumpは1MBごとに新しいキャプチャファイルを開始します。キャプチャファイルは、samba共有からアクセスできます。スクリプトを使用して出力pcapsをtcpdumpで聞く

私は共有からpcapファイルを読み取り、それらを処理するpythonスクリプトを書いています。

問題は、tcpdumpは現在書き込まれているファイルをロックしないことです(これは間違いなくtcpdumpであり、sambaサーバーではありません)。したがって、スクリプトが処理を開始している間にファイルがまだ書き込まれているかどうかはわかりません。さらに、tcpdumpは突然クローズされる可能性があります。したがって、私はファイルサイズを指標としてカウントしたくないです。

答えて

1

os.path.getmtime?これは、最後の変更時刻を取得するために使用できます。

または、ストリームをtcpdumpから自分のプロセスにパイプすることができます。teeは、自分のファイルにデータをバッファし、バッファします。

tcpdump | python some_script.py

そしてsome_script.pyまたは類似した何か:

import fileinput 
import sys 
from tempfile import SpooledTemporaryFile 
s = SpooledTemporaryFile(max_size=1024, prefix='saves_', dir='/some/dir') 
for line in fileinput.input(sys.argv[1:]): 
    # write to spooled buffer 
    s.write(line) 
    # tee back to stdout 
    sys.stdout.write(line) 

SpooledTemporaryFileはバッファを作成します。

fileinput.inputstdinから読み取ることができるなどのファイルのリストを取ることができます:

  • python some_script.py /some/file.input.txt ... OR
  • tcpdump | python some_script.py

sys.argv[1:]は、リストなどのファイルをつかむために使用され、それらがリストされている場合。

関連する問題