tcpdump:匹配确切的数据包长度

时间:2012-10-25 11:49:46

标签: linux tcpdump

我需要捕获长度等于16字节的数据包

我带来的更接近的是:

tcpdump -ni lo -ttt dst port 1337 and greater 16

如果我添加其他过滤器以符合我的意愿:

tcpdump -ni lo -ttt dst port 1337 and greater 16 and not greater 17
tcpdump -ni lo -ttt dst port 1337 and \(greater 16 and not greater 17\)
tcpdump -ni lo -ttt dst port 1337 and greater 16 and less 16

它根本不显示任何数据包。

虽然使用:

tcpdump -ni lo -ttt dst port 1337 and less 16

似乎也不起作用,如果较少的过滤器工作,我实际上是在徘徊......

欢迎任何帮助:)

2 个答案:

答案 0 :(得分:3)

正如Barry Margolin指出的那样,greater运算符会检查整个数据包的长度,包括所有标头。 16个字节的TCP有效负载加上20个字节的TCP报头(这是最小的TCP报头长度,没有选项)加上20个字节的IPv4报头(这是最小的IPv4报头长度,没有选项)加上14个字节的以太网报头,例如, 70个字节。

我从“lo”猜测你在Linux上捕获并在环回接口上捕获,在这种情况下,数据包有一个(假的)以太网头。

68字节是旧版tcpdump中的默认快照长度,在没有IPv6支持的情况下构建时,因此报告为68的长度可能是捕获的长度,最后2个字节被切断。尝试使用标志-o 0运行tcpdump(除非它是真正的旧版本的tcpdump,快照长度为0意味着“设置快照长度非常高,以便数据包不会被切断关)。

答案 1 :(得分:2)

好的,它确实有效。通过“-v”标志可以看到数据包长度。