3

我需要捕获长度等于 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

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

欢迎任何帮助:)

4

1 回答 1

3

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

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

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

于 2014-04-10T02:00:15.213 回答