リアルタイムでtcpdump出力のタイムスタンプ処理

リアルタイムでtcpdump出力のタイムスタンプ処理

tcpdumpフィルタに一致するパケットを見た後の秒数を含むファイルを保持したいと思います。目的は、チャットの多いクライアントがネットワークに接続されなくなった時期を確認することです。もはやMDNSごみが見えなくなったら、それが消えたと確信しています。

sudo tcpdump -l -tttt -i wlan0 port 5353 and src <hostname> | cut -c -19 | xargs -0 -n1 ./timesec.sh

私が今まで得たものです。timesec.shの入力パラメータを使用してdate -dファイルに保存された日付と比較し、ファイルの秒を更新します。

cutしかし、うまくいかず、出力が期待どおりにパイプされていないようです。

ベストアンサー1

私の考えでは、-0xargsコマンドラインからこれを削除する必要があるようです。私が知っている限り、サポートされていない-0null終了でフィールドを区切るために使用されます。代わりに、改行で終了フィールドをcut使用することをお勧めします。-d '\n'

... | cut -c -19 | xargs -d '\n' -n1 ./timesec.sh

~から文書

-0

入力は空白ではなくヌル文字で終わり、引用符とバックスラッシュは特別ではありません(各文字は文字通り使用されます)。他のパラメーターと同様に処理されるファイル終了文字列を無効にします。入力にスペース、引用符、またはバックスラッシュを含めることができる場合に便利です。 GNU find -print0オプションは、このパターンに適した入力を生成します。

--delimiter=区切り文字

-d 区切り

入力用語は指定された文字で終わります。引用符とバックスラッシュは特別ではありません。入力のすべての文字は文字通り処理されます。他のパラメーターと同様に処理されるファイル終了文字列を無効にします。このオプションは、入力が改行で区切られた項目のみで構成されている場合に使用できますが、可能であれば --null を使用するようにプログラムを設計することは、ほぼ常に優れています。指定された区切り文字は、単一文字、Cスタイル文字エスケープ(\ nなど)、または8進数または16進数のエスケープコードです。 8進数と16進数のエスケープコードはprintfコマンドとして理解されます。マルチバイト文字はサポートされていません。

おすすめ記事