Tcpdump - 送信および受信 UDP パケットのカウント

Tcpdump - 送信および受信 UDP パケットのカウント

tcpdump送信 UDP パケットと受信 UDP パケットの数を (セットアップ時間内に) カウントすることは可能ですか?

の経験があまりないのでtcpdump、その方法についてのアドバイスは非常に役立ちます。timeout一定時間後にプロセスを停止したい場合はコマンドがよいと読んだので、tcpdump自分の時間が経ったら停止しようかと考えていました。

しかし、送信パケットと受信パケットの数をカウントし、UDP パケットのみをフィルタリングするにはどうすればよいでしょうか?

答え1

tcpdump私はこれに(または)は使いません。代わりに、一定期間のパケット数をカウントするためにtsharkを使います。iptables

# Prepare two sets of counters and set up the rules
#
iptables -N udp_in
iptables -N udp_out
iptables -A udp_in
iptables -A udp_out

iptables -A OUTPUT --protocol udp -j udp_out
iptables -A INPUT --protocol udp -j udp_in

生理開始時にカウンターをリセットするには次のようにします

# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out

生理終了時のカウンターは次のように確認できます

# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
echo "in=$packets_in, out=$packets_out"

Zフラグを同時に指定することで、カウンタを読み取り、すぐにリセットすることができます。例えば

packets_in=$(iptables -nvLZ udp_in | awk '/all/{print $1}')

ビットをまとめて、必要な追加のiptablesチェーンをすでに作成していると仮定すると(上記を参照)、次のようなものを使用できます。

# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out

# Wait 10 seconds
#
period=10
sleep "$period"

# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')

# Report the results
#
echo "During the last $period seconds we saw $packets_in UDP packet(s) in and $packets_out UDP packet(s) out."

答え2

man tcpdump必要な情報を提供します。tcpdumpのWebページには、マニュアルページ

説明には、tcpdumpパケットのキャプチャが完了すると、キャプチャされたパケットの数、フィルターによって受信されたパケットの数、カーネルによってドロップされたパケットの数を報告すると書かれています。

フィルタリング (特定のタイプのパケットのみを検索する方法) ははるかに困難になる可能性がありますが、EXAMPLES セクションには、必要なフィルターが例だけudpであるという十分なヒントが記載されているはずです。

したがって、正しいフィルターがわかったら、tcpdumpwithを使用してtimeout定義した時間だけフィルターを実行し、 killtcpdumpするとパケットの数を取得できます。

timeout 20 tcpdump udp

これにより、udp の tcpdump フィルタリングが実行され、20 秒後に tcpdump が強制終了されます。

関連情報