2017-04-25 52 views
0

我有一個tcpdump過程中的紅帽服務器連續捕獲其流量NIC。 tcpdump每1MB啓動一個新的捕獲文件。捕獲文件可通過samba共享訪問。用腳本聽tcpdump輸出pcaps

我正在寫一個python腳本,它從共享中讀取pcap文件並處理它們。

問題是tcpdump沒有鎖定當前正在寫入的文件(它絕對是tcpdump而不是samba服務器)。因此,當我的腳本開始處理文件時,我不知道該文件是否仍在寫入。而且,tcpdump可以突然關閉,因此我不希望將文件大小作爲指標。

回答

1

os.path.getmtime?這可以用於獲取上次修改時間。

或者您可以將流從tcpdump傳輸到您自己的進程中,將數據傳輸到您自己的文件和緩衝區。

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.input可以從stdin閱讀或可以採取類似的文件列表:

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

sys.argv[1:]用來抓取文件作爲一個列表,如果他們被列出。