TCPDUMP 位掩码

TCPDUM Bit Masking

正在从 tcp 负载中读取 'GE'。基本上是为了保持过滤器简短而尝试准备 GET,仅使用 'GE' 因为它获得具有 GET 关键字的数据包。

带位移位的 Blow Filter 工作正常

"tcpdump -r tcpdump.pcap -nta 'tcp[((tcp[12] >> 4) * 4):2] = 0x4745'"

但我不确定为什么下面的一个不起作用

tcpdump -r file.pcap -nta 'tcp[((tcp[12] & 0xf0 != 0) * 4):2] = 0x4745'

如果有人能通知问题,那将是一个很大的帮助。谢谢。

你的第二个没有工作,因为你屏蔽了偏移量 12 的低半字节并保留了高半字节......这是正确的..但你实际上没有捕获它的值。

实际上,你是这样说的:

(tcp[12] & 0xf0 != 0)

这将产生 1 或零作为真或假。接下来,将其乘以 4...这将始终有效,因为 TCP header 长度将始终大于零...但它现在将在偏移量 4 处查找 "GE" 字母TCP header...序列号的开始。

你仍然可以使用0xf0掩码,但你仍然需要分割它或移动它。例如:

 (tcp[12] & 0xf0 >> 2)

请注意,我正在利用移位来避免必须乘以 4...乘以 4 相当于左移 2 位。因为我通常会将第 12 个字节的偏移量移动 4 位,所以我节省了一步。