0

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

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){
    ...
}

有人可以指导我解决这个问题吗?谢谢你。

4

1 回答 1

0

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

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

于 2015-02-05T00:48:21.133 回答