Http 位掩蔽

Http 位掩蔽,http,tcp,ip,tcpdump,Http,Tcp,Ip,Tcpdump,正在从tcp负载读取“GE”。基本上是为了保持过滤器的简短而尝试准备就绪,只使用“GE”作为它获取具有GET关键字的数据包 带钻头移动的吹扫过滤器工作良好 “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' 如果有人能通知这个问题,那将是一个很大的帮助。谢谢 第二个不起作用

正在从tcp负载读取“GE”。基本上是为了保持过滤器的简短而尝试准备就绪,只使用“GE”作为它获取具有GET关键字的数据包

带钻头移动的吹扫过滤器工作良好

“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或0作为真或假。接下来,你把它乘以4。。。这将始终有效,因为TCP标头长度将始终大于零。。。但它现在将在TCP头中的偏移量4处查找“GE”字母。。。序列号的开头

您仍然可以使用
0xf0
掩码,但仍然需要将其除以或移位。例如:

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

注意,我正在利用移位来避免乘以4。。。乘以4相当于左移2位。由于我通常会将第12字节偏移量移动4位,因此我保存了一个步骤。

您的第二个步骤不起作用,因为您正在屏蔽偏移量12的低半字节并保留高半字节。。。这是正确的。。但你并没有真正抓住它的价值

实际上,你说过:

(tcp[12] & 0xf0 != 0)
这将产生1或0作为真或假。接下来,你把它乘以4。。。这将始终有效,因为TCP标头长度将始终大于零。。。但它现在将在TCP头中的偏移量4处查找“GE”字母。。。序列号的开头

您仍然可以使用
0xf0
掩码,但仍然需要将其除以或移位。例如:

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

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

当我使用(tcp[12]>>4)*4而不是(tcp[12]&0xf0)*4时,输出是不同的。为什么?当我使用(tcp[12]>>4)*4而不是(tcp[12]&0xf0)*4时,输出是不同的?