使用 buffer -B 選項的 tcpdump 的管道輸出

使用 buffer -B 選項的 tcpdump 的管道輸出

我正在使用以下命令在 Ubuntu 16.04LTS 上處理 tcpdump 的輸出:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py

這是可行的,但不幸的是,對於我想要編寫的腳本來說,有太多的資料包需要處理,所以我想每 100 毫秒左右刪除一次來自相同 IP 位址的資料包。我在 tcpdump 線上說明頁中沒有看到執行此操作的方法。有沒有辦法做到這一點?

我確實看到您可以使用調整緩衝區大小-B,但是當我嘗試使用測試 python 腳本執行以下命令時(僅輸出在 stdin 上讀取的內容):

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py

除了輸出到終端的空白行之外,我什麼也沒有得到。我不明白緩衝區是如何工作的,因為如果我不將其通過管道傳輸到腳本,則終端的輸出可以正常工作:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l

(Python腳本):

import sys

while True:
    print sys.stdin.readline()

有人可以解釋是否有一種方法可以有效地限制輸出的每個 IP 位址每秒的資料包數量,如果沒有,-B 選項如何運作,以及是否可以像這樣透過管道傳輸到 python 腳本?

答案1

經過反覆試驗,我發現如果我在 -B 選項中嘗試任何低於 256 的值,就會失敗。因此,如果這對其他人有幫助,請至少使用-B 256

相關內容