Tcpdump - 統計傳出和傳入的 UDP 封包

Tcpdump - 統計傳出和傳入的 UDP 封包

是否可以tcpdump計算(在某些設定時間內)傳出和傳入 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 網頁也提供了線上說明頁

在描述中,它說當tcpdump完成捕獲資料包時,它會報告捕獲的資料包、過濾器接收的資料包和內核丟棄的資料包的計數。

過濾(即僅查找某種類型的資料包的方式)可能要困難得多,但範例部分應該提供足夠的線索,表明您需要的唯一過濾器適用於udp您的範例。

因此,一旦您找到了正確的過濾器,請使用tcpdumpwithtimeout來在您定義的時間內運行它,kill tcpdump,然後您將獲得資料包的計數。

timeout 20 tcpdump udp

這將為 udp 運行 tcpdump 過濾,並在 20 秒後終止 tcpdump。

相關內容