Snort TCP标志

时间:2015-02-03 21:10:28

标签: security tcp tcp-ip snort

如您所知,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){
    ...
}

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

1 个答案:

答案 0 :(得分:0)

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

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