2015-02-03 3 views
0

Как вы знаете, TCP имеет 9 флагов. Но, как вы видите TCP флаги бит, определенные в sf_snort_packet.h файле:Флаги Snort TCP

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

также predefinded флаги 9 бит, как должно быть:

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

Теперь я запутался, если я хочу, чтобы проверить TCP_SYN флаг; как это сделать. Я использовал это, но он не возвращает правильный ответ:

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

Может ли кто-нибудь узнать меня об этой проблеме? Спасибо.

ответ

0

NS (ECN-nonce concealment protection (экспериментальный: см. RFC 3540)) флаг в tcp по-прежнему «экспериментальный», и нет флага для этого в snort, поэтому 8 бит - это все, что необходимо для хранения 8 других флаги. Сказав это, я не совсем уверен, что вы здесь делаете. Вы пишете собственный код внутри snort и перекомпилируете? Если это так, вам может потребоваться предоставить более подробную информацию/код.

Ваша логика правильная. Для сравнения вы должны вернуть 1 (true), если флаги packet-> tcp_header-> имеют второй бит. Если это ваш собственный код, вам нужно отладить и сбросить значение флажков packet-> tcp_header->, чтобы узнать, что это такое. В источнике snort это обычно упоминается с флагами p-> tcp_header->, поэтому, если вы находитесь в той же области действия и используете одну и ту же переменную для пакета, вам нужно будет изменить «пакет» на «p», но снова вы можете необходимо предоставить больше кода, если он является обычным.

Смежные вопросы