吸吮 TCP 标志



如你所知,TCP有9个标志。但正如你所看到的,snort 的 TCP 标志是sf_snort_packet.h文件中定义的 8 位:

typedef struct _TCPHeader
{
...
    uint8_t flags;
...
} TCPHeader;

此外,预先找到的标志是 9 位,必须:

#define TCPHEADER_FIN  0x01
#define TCPHEADER_SYN  0x02
...

现在我很困惑,如果我想检查TCP_SYN标志;如何做到这一点。我已经使用了这个,但它没有返回正确的答案:

if (packet->tcp_header->flags & TCPHEADER_SYN){
    ...
}

任何人都可以指导我解决这个问题吗?谢谢。

tcp 中的 NS(ECN-nonce-nonce隐藏保护(实验性:参见 RFC 3540))标志仍然是"实验性的",在 snort 中没有这个标志,所以存储其他 8 个标志只需要 8 位。话虽如此,我不完全确定你在这里做什么。您是否在 snort 中编写自定义代码并重新编译?如果是这样,您可能需要提供更多详细信息/代码。

你的逻辑是正确的。如果数据包>tcp_header->标志设置了第二个位,则您的比较应返回 1(true)。如果这是您的自定义代码,则需要调试并转储数据包>tcp_header>标志的值以查看它是什么。 在 snort 源中,这通常使用 p->tcp_header-> 标志来引用,因此如果您在同一范围内并且对数据包使用相同的变量,则需要将"packet"更改为"p",但如果它是自定义的,您可能需要提供更多代码。

最新更新