如何根据数据包长度过滤 tcpdump 输出

Posted

技术标签:

【中文标题】如何根据数据包长度过滤 tcpdump 输出【英文标题】:How to filter tcpdump output based on packet length 【发布时间】:2012-04-10 01:44:42 【问题描述】:

我一直在尝试根据数据包长度过滤 tcpdump 输出。但我没有运气。

这是命令的简单输出;

tcpdump -n -i eth0 dst 端口 443 -A

17:03:30.866890 IP 192.168.0.149.45104 > 62.75.148.60.443: Flags [S], seq 2685064927, win 14600, options [mss 1460,sackOK,TS val 7028787 ecr 0,nop,wscale 4], length 0
E..<..@.@.......>K.<.0...
........9............
.k@3........


17:03:30.867658 IP 192.168.0.149.45104 > 62.75.148.60.443: Flags [.], ack 2285019097, win 913, options [nop,nop,TS val 7028787 ecr 974439509], length 0
E..4..@.@.......>K.<.0...
...2.............
.k@3:..U


17:03:30.867928 IP 192.168.0.149.45104 > 62.75.148.60.443: Flags [P.], seq 0:171, ack 1, win 913, options [nop,nop,TS val 7028787 ecr 974439509], length 171
E.....@.@..f....>K.<.0...
...2.............
.k@3:..U...........Opw2.....l..".T.7.q.]h..8W..%.....H...
.......9.8.......5...   .....E.D.3.2...........A...../.........
...1.........alice.sni.velox.ch.
.................#..


17:03:30.869712 IP 192.168.0.149.45104 > 62.75.148.60.443: Flags [.], ack 1319, win 1078, options [nop,nop,TS val 7028788 ecr 974439511], length 0
E..4..@.@.......>K.<.0...
...2.....6.......
.k@4:..W


17:03:30.870724 IP 192.168.0.149.45104 > 62.75.148.60.443: Flags [P.], seq 171:178, ack 1319, win 1078, options [nop,nop,TS val 7028788 ecr 974439511], length 7
E..;..@.@.......>K.<.0...
...2.....6.......
.k@4:..W......0

我只想查看长度超过 100 字节的包。对于这种情况,只有第 3 个数据包。

选项 [nop,nop,TS val 7028787 ecr 974439509],长度 171

我查看了 tcpdump 的手册页,但找不到任何有用的参数。这里提到了一个表达“更大的长度”; http://www.ethereal.com/docs/man-pages/tcpdump.8.html 但我也不能使用那个表达式。

$ tcpdump -n -i eth0 dst port 443 -A -x greater 100
tcpdump: syntax error

感谢您的帮助。

【问题讨论】:

【参考方案1】:

greater length 有效,但您必须将其用作完整过滤器表达式的一部分,并且过滤器表达式必须在 all 命令行之后标记参数。

工作示例:

tcpdump -n -i eth0 -A -x dst port 443 and greater 100

应该可以工作 - dst port 443 and greater 100 是一个完整的过滤器表达式,它检查发送到 TCP 或 UDP 端口 443 并且具有 total 长度(包括链路层、IP、和 TCP 标头!)大于 100。

不工作示例:

tcpdump -n -i eth0 dst port 443 -A -x greater 100

将不起作用 - dst port 443 中的 dst 被视为过滤器表达式的开头,这意味着它和它之后的 所有内容包括 @987654327 @ 和 -x 被视为过滤器表达式的一部分,但 -A-x 不是过滤器表达式的有效组件。它们可能是作为命令行选项的,所以它们必须放在所有非标志参数之前,包括过滤器表达式的组件。

【讨论】:

以上是关于如何根据数据包长度过滤 tcpdump 输出的主要内容,如果未能解决你的问题,请参考以下文章

[linux] tcpdump抓包案例

tcpdump 协议过滤哪些协议

tcpdump规则过滤抓包及结果筛选查看

tcpdump

Linux命令之tcpdump

Linux 抓包工具 tcpdump