次のコマンドを使用して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アドレスあたりの1秒あたりの出力パケット数を効果的に制限する方法があるか、それ以外の場合は-Bオプションがどのように機能するのか、そしてそのようなPythonスクリプトにパイプすることができるかを説明できますか?
答え1
いくつかの試行錯誤の終わりに-Bオプションを使用して256未満の値を試すと失敗することがわかりました。したがって、これが他の人に役立つ場合は、少なくとも以下を使用してください。-B 256