次のコマンドを使用して、Ubuntu 16.04LTS 上の tcpdump の出力を処理しています。
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py
これは機能しますが、残念ながら、書きたいスクリプトを処理するにはパケットが多すぎるため、同じ IP アドレスから送信されるパケットを 100 ミリ秒ごとに 1 回削除したいと思います。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