tcpdump过滤器获取所有具有tcp选项的数据包类型等于x

时间:2018-02-11 12:33:24

标签: tcp filter tcpdump

花费几个小时寻找tcpdump过滤器以获取所有具有tcp选项类型的数据包等于x(特别是8)。 Wireshark的过滤器只是tcp.option_kind == 8.

阅读https://www.wains.be/pub/networking/tcpdump_advanced_filters.txt后尝试使用&t; tcp [22] = 8'没有运气

您的帮助将不胜感激:)谢谢

1 个答案:

答案 0 :(得分:0)

我只为您提供部分答案。如果您要查找的选项始终是第一个TCP选项,则可以使用以下过滤器:

"(((tcp[12] & 0xf0) >> 2) > 20) && tcp[20] = 8"

此过滤器的作用是什么?此过滤器将data offset字段(即TCP标头长度)隔离,以首先确保TCP标头包含任何选项。由于数据偏移字段仅包含TCP报头的偏移12处的字节的前4位,因此我们必须通过应用0xf0的掩码来隔离这些位。接下来,将值向右移位4位,将其转换为我们可以使用的数字,然后乘以4(或向左移位2位),因为数据偏移代表标题的32位字数。相当于向右移动4然后向左移动2只是向右移动2.如果数据偏移值大于20个字节,那么我们知道存在一些TCP选项,我们可以比较偏移量为20的字节,这是第一个选项的位置"类型"字段,对TCP选项感兴趣,在这种情况下为8,即timestamps option

同样,只有感兴趣的TCP选项始终是第一个选项时,上述过滤器才有效。如果该选项在其他选项之后发生,则将无法捕获这些数据包。扩展此过滤器以捕获感兴趣的TCP选项,无论其位置可能,但我不认为这样做很容易。