こういう小技は普段使わないせいですぐ忘れてしまうからメモ。
たとえば、xx.xx.xx.xx:xxx -> 192.168.0.20:12345
というUDPトラフィックをざっくりキャプチャしてあるとして、この中から特定のフロー192.168.0.10:xxx -> 192.168.0.20:12345
について、そのパケット数とペイロードを算出したい、という場合の手順。
手順
# tcpdump -s0 -w /tmp/udp.pcap udp port 12345
# tshark -r /tmp/udp.pcap -T fields -e data.len "ip.src==192.168.0.10"|awk '{pkts+=1; bytes+=$1} END {print "packets=", pkts, "bytes=", bytes}'
packets= 21734 bytes= 22255616
仕組みのメモ
やっていることは単純。-T fields -e XXX
で特定のフィールドだけを表示させることができる。たとえば
# tshark -r /tmp/udp.pcap -T fields -e data.len -c 3
1024
1024
1024
とか
tshark -r /tmp/udp.pcap -T fields -e ip.src_host -c 3
192.168.0.10
192.168.0.11
192.168.0.10