⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sf_snort_plugin_api.h

📁 snort2.8.4版本
💻 H
字号:
/* * sf_snort_plugin.h * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation.  You may not use, modify or * distribute this program under any other version of the GNU General * Public License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Copyright (C) 2005-2008 Sourcefire Inc. * * Author: Steve Sturges *         Andy Mullican * * Date: 5/2005 * * Sourcefire Black-box Plugin API for rules * */#ifndef SF_SNORT_PLUGIN_API_H_#define SF_SNORT_PLUGIN_API_H_#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "pcre.h"#include "stdio.h"#ifndef WIN32#include <netinet/in.h>#include <sys/types.h>#else#include <winsock2.h>#include <windows.h>#endif#include "sf_dynamic_define.h"#define ANY_NET         "any"#define HOME_NET        "$HOME_NET"#define EXTERNAL_NET    "$EXTERNAL_NET"#define ANY_PORT        "any"#define HTTP_SERVERS    "$HTTP_SERVERS"#define HTTP_PORTS      "$HTTP_PORTS"#define SMTP_SERVERS    "$SMTP_SERVERS"#ifdef WIN32#ifdef SF_SNORT_ENGINE_DLL#define ENGINE_LINKAGE __declspec(dllexport)#else#define ENGINE_LINKAGE __declspec(dllimport)#endif#else /* WIN32 */#define ENGINE_LINKAGE#endif /* WIN32 */#define RULE_MATCH 1#define RULE_NOMATCH 0#define RULE_DIRECTIONAL 0#define RULE_BIDIRECTIONAL 1#define CONTENT_MATCH          1#define CONTENT_NOMATCH        0#define CONTENT_TYPE_MISMATCH -1#define CONTENT_TYPE_MISSING  -2#define CONTENT_CURSOR_ERROR  -3#define CURSOR_IN_BOUNDS       1#define CURSOR_OUT_OF_BOUNDS   0/* Defined in sf_dynamic_define.h *///#define SNORT_PCRE_OVERRIDE_MATCH_LIMIT 0x80000000#define CONTENT_NOCASE          0x01#define CONTENT_RELATIVE        0x02#define CONTENT_UNICODE2BYTE    0x04#define CONTENT_UNICODE4BYTE    0x08#define CONTENT_FAST_PATTERN    0x10#define CONTENT_END_BUFFER      0x20#define CONTENT_BUF_NORMALIZED  0x100#define CONTENT_BUF_RAW         0x200#define CONTENT_BUF_URI         0x400#define CONTENT_BUF_POST        0x800#define CONTENT_BUF_HEADER      0x2000#define CONTENT_BUF_METHOD      0x4000#define CONTENT_BUF_COOKIE      0x8000#define BYTE_LITTLE_ENDIAN      0x0000#define BYTE_BIG_ENDIAN         0x1000#define EXTRACT_AS_BYTE         0x010000#define EXTRACT_AS_STRING       0x020000#define EXTRACT_AS_DEC          0x100000#define EXTRACT_AS_OCT          0x200000#define EXTRACT_AS_HEX          0x400000#define EXTRACT_AS_BIN          0x800000#define JUMP_FROM_BEGINNING     0x01000000#define JUMP_ALIGN              0x02000000#define NOT_FLAG                0x10000000#define CHECK_EQ            0#define CHECK_NEQ           1#define CHECK_LT            2#define CHECK_GT            3#define CHECK_LTE           4#define CHECK_GTE           5#define CHECK_AND           6#define CHECK_XOR           7#define CHECK_ALL           8#define CHECK_ATLEASTONE    9#define CHECK_NONE          10typedef struct _ContentInfo{    const u_int8_t *pattern;    u_int32_t depth;    int32_t   offset;    u_int32_t flags;        /* must include a CONTENT_BUF_X */    void     *boyer_ptr;    u_int8_t *patternByteForm;    u_int32_t patternByteFormLength;    u_int32_t incrementLength;} ContentInfo;typedef struct _CursorInfo{    int32_t   offset;    u_int32_t flags;        /* specify one of CONTENT_BUF_X */} CursorInfo;/*pcre.h provides flags:PCRE_CASELESSPCRE_MULTILINEPCRE_DOTALLPCRE_EXTENDEDPCRE_ANCHOREDPCRE_DOLLAR_ENDONLYPCRE_UNGREEDY*/typedef struct _PCREInfo{    char     *expr;    void     *compiled_expr;    void     *compiled_extra;    u_int32_t compile_flags;    u_int32_t flags; /* must include a CONTENT_BUF_X */} PCREInfo;#define FLOWBIT_SET       0x01  #define FLOWBIT_UNSET     0x02#define FLOWBIT_TOGGLE    0x04#define FLOWBIT_ISSET     0x08#define FLOWBIT_ISNOTSET  0x10#define FLOWBIT_RESET     0x20#define FLOWBIT_NOALERT   0x40typedef struct _FlowBitsInfo{    char      *flowBitsName;    u_int8_t   operation;    u_int32_t  id;    u_int32_t  flags;} FlowBitsInfo;typedef struct _ByteData{    u_int32_t bytes;      /* Number of bytes to extract */    u_int32_t op;         /* Type of byte comparison, for checkValue */    u_int32_t value;      /* Value to compare value against, for checkValue, or extracted value */    int32_t   offset;     /* Offset from cursor */    u_int32_t multiplier; /* Used for byte jump -- 32bits is MORE than enough */    u_int32_t flags;      /* must include a CONTENT_BUF_X */} ByteData;typedef struct _ByteExtract{    u_int32_t bytes;      /* Number of bytes to extract */    int32_t   offset;     /* Offset from cursor */    u_int32_t multiplier; /* Multiply value by this (similar to byte jump) */    u_int32_t flags;      /* must include a CONTENT_BUF_X */    char *refId;          /* To match up with a DynamicElement refId */    void *memoryLocation; /* Location to store the data extracted */} ByteExtract;typedef struct _FlowFlags{    u_int32_t   flags;    /* FLOW_* values */} FlowFlags;#define ASN1_ABS_OFFSET 1#define ASN1_REL_OFFSET 2typedef struct _Asn1Context{    int bs_overflow;    int double_overflow;    int print;    int length;    unsigned int max_length;    int offset;    int offset_type;    u_int32_t  flags;} Asn1Context;#define IP_HDR_ID           0x0001  /* IP Header ID */#define IP_HDR_PROTO        0x0002  /* IP Protocol */#define IP_HDR_FRAGBITS     0x0003  /* Frag Flags set in IP Header */#define IP_HDR_FRAGOFFSET   0x0004  /* Frag Offset set in IP Header */#define IP_HDR_OPTIONS      0x0005  /* IP Options -- is option xx included */#define IP_HDR_TTL          0x0006  /* IP Time to live */#define IP_HDR_TOS          0x0007  /* IP Type of Service */#define IP_HDR_OPTCHECK_MASK 0x000f#define TCP_HDR_ACK         0x0010  /* TCP Ack Value */#define TCP_HDR_SEQ         0x0020  /* TCP Seq Value */#define TCP_HDR_FLAGS       0x0030  /* Flags set in TCP Header */#define TCP_HDR_OPTIONS     0x0040  /* TCP Options -- is option xx included */#define TCP_HDR_WIN         0x0050  /* TCP Window */#define TCP_HDR_OPTCHECK_MASK 0x00f0#define ICMP_HDR_CODE       0x1000  /* ICMP Header Code */#define ICMP_HDR_TYPE       0x2000  /* ICMP Header Type */#define ICMP_HDR_ID         0x3000  /* ICMP ID for ICMP_ECHO/ICMP_ECHO_REPLY */#define ICMP_HDR_SEQ        0x4000  /* ICMP ID for ICMP_ECHO/ICMP_ECHO_REPLY */#define ICMP_HDR_OPTCHECK_MASK 0xf000typedef struct _HdrOptCheck{    u_int16_t hdrField;   /* Field to check */    u_int32_t op;         /* Type of comparison */    u_int32_t value;      /* Value to compare value against */    u_int32_t mask_value; /* bits of value to ignore */    u_int32_t flags;} HdrOptCheck;#define DYNAMIC_TYPE_INT_STATIC 1#define DYNAMIC_TYPE_INT_REF    2typedef struct _DynamicElement{    char dynamicType;           /* type of this field - static or reference */    char *refId;                /* reference ID (NULL if static) */    union    {        void *voidPtr;          /* Holder */        int32_t staticInt;        /* Value of static */        int32_t *dynamicInt;  /* Pointer to value of dynamic */    } data;} DynamicElement;typedef struct _LoopInfo{    DynamicElement *start;      /* Starting value of FOR loop (i=start) */    DynamicElement *end;        /* Ending value of FOR loop (i OP end) */    DynamicElement *increment;  /* Increment value of FOR loop (i+= increment) */    u_int32_t op;               /* Type of comparison for loop termination */    CursorInfo *cursorAdjust;   /* How to move cursor each iteration of loop */    struct _Rule *subRule;      /* Pointer to SubRule & options to evaluate within                                 * the loop */    u_int8_t initialized;       /* Loop initialized properly (safeguard) */    u_int32_t flags;            /* can be used to negate loop results, specifies                                 * relative. */} LoopInfo;typedef struct _PreprocessorOption{    char *optionName;    char *optionParameters;    u_int32_t flags;    void *optionInit;    void *optionEval;    //PreprocOptionInit optionInit;    //PreprocOptionEval optionEval;    void *dataPtr;} PreprocessorOption;typedef struct _RuleOption{    int optionType;    union    {        void *ptr;        ContentInfo *content;        CursorInfo *cursor;        PCREInfo *pcre;        FlowBitsInfo *flowBit;        ByteData *byte;        ByteExtract *byteExtract;        FlowFlags *flowFlags;        Asn1Context *asn1;        HdrOptCheck *hdrData;        LoopInfo    *loop;        PreprocessorOption *preprocOpt;    } option_u;} RuleOption;typedef struct _IPInfo{    u_int8_t protocol;    char *   src_addr;    char *   src_port; /* 0 for non TCP/UDP */    char     direction;     /* non-zero is bi-directional */    char *   dst_addr;    char *   dst_port; /* 0 for non TCP/UDP */} IPInfo;typedef struct _RuleReference{    char *systemName;    char *refIdentifier;} RuleReference;#define REGISTER_RULE 1#define DONT_REGISTER_RULE 0typedef struct _RuleMetaData {    char *data;} RuleMetaData;typedef struct _RuleInformation{    u_int32_t genID;    u_int32_t sigID;    u_int32_t revision;    char     *classification; /* String format of classification name */    u_int32_t priority;    char     *message;    RuleReference **references; /* NULL terminated array of references */    RuleMetaData **meta; /* NULL terminated array of references */} RuleInformation;typedef int (*ruleEvalFunc)(void *);typedef struct _Rule{    IPInfo ip;    RuleInformation info;        RuleOption **options; /* NULL terminated array of RuleOption union */    ruleEvalFunc evalFunc;    char initialized;     /* Rule Initialized, used internally */    u_int32_t numOptions; /* Rule option count, used internally */    char noAlert;         /* Flag with no alert, used internally */    void *ruleData;    /* Hash table for dynamic data pointers */} Rule;ENGINE_LINKAGE int RegisterRules(Rule **rules);ENGINE_LINKAGE int DumpRules(char *rulesFileName, Rule **rules);ENGINE_LINKAGE int contentMatch(void *p, ContentInfo* content, const u_int8_t **cursor);ENGINE_LINKAGE int checkFlow(void *p, FlowFlags *flowFlags);ENGINE_LINKAGE int extractValue(void *p, ByteExtract *byteExtract, const u_int8_t *cursor);ENGINE_LINKAGE int processFlowbits(void *p, FlowBitsInfo *flowBits);ENGINE_LINKAGE int getBuffer(void *p, int flags, const u_int8_t **start, const u_int8_t **end);ENGINE_LINKAGE int setCursor(void *p, CursorInfo *cursorInfo, const u_int8_t **cursor);ENGINE_LINKAGE int checkCursor(void *p, CursorInfo *cursorInfo, const u_int8_t *cursor);ENGINE_LINKAGE int checkValue(void *p, ByteData *byteData, u_int32_t value, const u_int8_t *cursor);/* Same as extractValue plus checkValue */ENGINE_LINKAGE int byteTest(void *p, ByteData *byteData, const u_int8_t *cursor);/* Same as extractValue plus setCursor */ENGINE_LINKAGE int byteJump(void *p, ByteData *byteData, const u_int8_t **cursor);ENGINE_LINKAGE int pcreMatch(void *p, PCREInfo* pcre, const u_int8_t **cursor);ENGINE_LINKAGE int detectAsn1(void *p, Asn1Context* asn1, const u_int8_t *cursor);ENGINE_LINKAGE int checkHdrOpt(void *p, HdrOptCheck *optData);ENGINE_LINKAGE int loopEval(void *p, LoopInfo *loop, const u_int8_t **cursor);ENGINE_LINKAGE int preprocOptionEval(void *p, PreprocessorOption *preprocOpt, const u_int8_t **cursor);ENGINE_LINKAGE void setTempCursor(const u_int8_t **temp_cursor, const u_int8_t **cursor);ENGINE_LINKAGE void revertTempCursor(const u_int8_t **temp_cursor, const u_int8_t **cursor);ENGINE_LINKAGE int ruleMatch(void *p, Rule *rule);ENGINE_LINKAGE int MatchDecryptedRC4(    const u_int8_t *key, u_int16_t keylen, const u_int8_t *encrypted_data,     u_int8_t *plain_data, u_int16_t datalen);ENGINE_LINKAGE void storeRuleData(void *p, void *rule_data);ENGINE_LINKAGE void *getRuleData(void *p);ENGINE_LINKAGE int pcreExecWrapper(const PCREInfo *pcre_info, const char *buf, int len, int start_offset,                                    int options, int *ovector, int ovecsize);#endif /* SF_SNORT_PLUGIN_API_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -