2012-10-25 23 views
3

我需要捕捉长度等于包16个字节tcpdump的:精确匹配数据包长度

越接近我想出了是这样的:

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 

它根本没有显示任何数据包。

Althought,使用:

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

似乎并没有工作都不是,我实际上游荡,如果少滤镜......

欢迎任何帮助:)

+0

我认为长度包括所有的头文件,而不仅仅是TCP数据,我不认为你可能会看到只有16字节的数据包,以太网帧中的TCP段有18字节的以太网头和尾部,至少16字节的TCP头(通常更多的是因为TCP选项) – Barmar

+0

我应该精确地知道tcpdump将我发送的数据包看作是长度为16字节的数据包,这就是为什么我要使用数据包长度对它们进行过滤的原因。通常的TCP层从总长度没有?还是它显示不相关的长度? – naab

+1

是的,tcpdump做了很多decodi在它显示给你之前,并显示特定于协议的数据。但是这些过滤器是由一个对协议不太了解的底层库实现的。 – Barmar

回答

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意味着“将快照长度设置得非常高,以便数据包不会被切断)。

2

好吧,它确实有效。数据包长度通过“-v”标志可见。