我正在运行 tcpdump 来跟踪 2 个接口(一个输入接口和一个输出接口)上的流量。唯一的目的是测量输入接口接收传入 TCP 流量的时间与输出接口发出 UDP 流量的时间之间的延迟。
因为我需要进行数百次这样的测量,所以我喜欢将输出重定向到一个文件并编写一个简单的脚本来解析时间戳。
目前这是我的命令:tcpdump -i any -v "tcp or udp" -ttttt
| tee log
它可以工作,但我想知道是否可以进一步修剪它的输出(片段):
00:00:00.000000 IP (tos 0x0, ttl 64, id 28712, offset 0, flags [DF], proto TCP (6), length 60)
10.10.30.6.38574 > 10.10.30.161.81: Flags [S], cksum 0x55bd (correct), seq 1010316358, win 29200, options [mss 1460,sackOK,TS val 1402655839 ecr 0,nop,wscale 7], lis=
00:00:00.000035 IP (tos 0x0, ttl 255, id 15035, offset 0, flags [DF], proto TCP (6), length 60)
10.10.30.161.81 > 10.10.30.6.38574: Flags [S.], cksum 0x50e9 (incorrect -> 0xa4d3), seq 3593868966, ack 1010316359, win 4380, options [mss 1460,nop,nop,TS val 1402655838 ecr 1402655839,sackOK,eol], length 0 out
00:00:00.000438 IP (tos 0x0, ttl 64, id 28713, offset 0, flags [DF], proto TCP (6), length 52)
你可以看到两件事:
IP 地址(源和目标)与时间戳位于不同的行。
还有很多我不关心的信息
所以我的问题是:
有没有办法让 tcpdump 在与源/目标 IP 地址相同的行上显示时间戳?
我可以进一步削减产量吗?
[更新] 目前我决定采用以下 shell 命令解决方案。不过我仍然对我的问题感到好奇。
使用此命令查找第一个传入的 TCP 数据包:
$>grep -A 1 TCP /tmp/junk | head -n 2
这是第一个传出的 UDP:
$> grep -A 1 UDP /tmp/junk | head -n 2