如您所知,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){
...
}
有人可以指导我这个问题吗?谢谢。
答案 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",但如果是自定义的,您可能需要提供更多代码。