使用nmap Xmas扫描未设置TCP标志

时间:2017-10-30 10:22:51

标签: c tcp nmap

我正在解析数据包上的TCP标头,并且我正在尝试检查标志是否正确显示,但是当使用nmap命令运行圣诞扫描时:nmap -sX localhost,没有设置标志。

以下是我用来检查标志的代码:

if(tcp_header->th_flags & TH_URG & TH_PUSH & TH_FIN)
    xmasScans++;

我正在做一个类似的过程来检查单个标志,一个接一个。

以上代码是否正确检查标志? 感谢

1 个答案:

答案 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)