我需要捕获长度等于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
似乎也不起作用,如果较少的过滤器工作,我实际上是在徘徊......
欢迎任何帮助:)
答案 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”标志可以看到数据包长度。