我正在解析数据包上的TCP标头,并且我正在尝试检查标志是否正确显示,但是当使用nmap命令运行圣诞扫描时:nmap -sX localhost,没有设置标志。
以下是我用来检查标志的代码:
if(tcp_header->th_flags & TH_URG & TH_PUSH & TH_FIN)
xmasScans++;
我正在做一个类似的过程来检查单个标志,一个接一个。
以上代码是否正确检查标志? 感谢
答案 0 :(得分:0)
不,这不正确。像&
这样的按位运算符是左关联的,这意味着您可以将它视为左边的括号中的每个操作,如下所示:
(((tcp_header->th_flags & TH_URG) & TH_PUSH) & TH_FIN)
所以想象这些标志是0b00101001
,这是URG + PUSH + FIN而没有别的。第一个操作是:
00101001
& 00100000
= 00100000
结果只是TH_URG
。然后第二个操作相当于TH_URG & TH_PUSH
:
00100000
& 00001000
= 00000000
因此结果为0
,为false,条件将始终为false。相反,您需要单独测试每一个并将它们与逻辑 和组合:
if (tcp_header->th_flags & TH_URG
&& tcp_header->th_flags & TH_PUSH
&& tcp_header->th_flags & TH_FIN)