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

📄 sf_dynamic_plugins.c

📁 著名的入侵检测系统snort的最新版本的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
{    DynamicEnginePlugin *plugin;    RemoveDuplicateEngines();    plugin = loadedEngines;    while (plugin)    {        if (plugin->initFunc(info))        {            FatalError("Failed to initialize dynamic engine: %s version %d.%d.%d\n",                        plugin->metaData.uniqueName, plugin->metaData.major,                       plugin->metaData.minor, plugin->metaData.build);            //return -1;        }        plugin = plugin->next;    }    return 0;}void DynamicSetRuleData(void *p, void *data){    Packet *pkt = (Packet *)p;    if (stream_api && pkt)    {        stream_api->set_application_data(pkt->ssnptr, PP_RULES, data, &free);    }}void *DynamicGetRuleData(void *p){    Packet *pkt = (Packet *)p;    if (stream_api && pkt)    {        return stream_api->get_application_data(pkt->ssnptr, PP_RULES);    }    return NULL;}int InitDynamicEngines(){    int i;    DynamicEngineData engineData;    engineData.version = ENGINE_DATA_VERSION;    engineData.altBuffer = &DecodeBuffer[0];    for (i=0;i<MAX_URIINFOS;i++)        engineData.uriBuffers[i] = (UriInfo*)&UriBufs[i];    /* This is defined in dynamic-plugins/sp_dynamic.h */    engineData.ruleRegister = &RegisterDynamicRule;    engineData.flowbitRegister = &DynamicFlowbitRegister;    engineData.flowbitCheck = &DynamicFlowbitCheck;    engineData.asn1Detect = &DynamicAsn1Detect;    /* Pull this out of pv.dynamic_rules_path */    engineData.dataDumpDirectory = pv.dynamic_rules_path;    engineData.logMsg = &LogMessage;    engineData.errMsg = &ErrorMessage;    engineData.fatalMsg = &FatalError;    engineData.setRuleData = &DynamicSetRuleData;    engineData.getRuleData = &DynamicGetRuleData;    engineData.getPreprocOptFuncs = &GetPreprocessorRuleOptionFuncs;    return InitDynamicEnginePlugins(&engineData);}int InitDynamicPreprocessorPlugins(DynamicPreprocessorData *info){    DynamicPreprocessorPlugin *plugin;    RemoveDuplicatePreprocessorPlugins();    plugin = loadedPreprocessorPlugins;    while (plugin)    {        if (plugin->initFunc(info))        {            FatalError("Failed to initialize dynamic preprocessor: %s version %d.%d.%d\n",                        plugin->metaData.uniqueName, plugin->metaData.major,                       plugin->metaData.minor, plugin->metaData.build);            //return -1;        }        plugin = plugin->next;    }    return 0;}/* Do this to avoid exposing Packet & PreprocessFuncNode from * snort to non-GPL code */typedef void (*SnortPacketProcessFunc)(Packet *, void *);void *AddPreprocessor(void (*func)(void *, void *), unsigned short priority, unsigned int preproc_id){    SnortPacketProcessFunc preprocessorFunc = (SnortPacketProcessFunc)func;    return (void *)AddFuncToPreprocList(preprocessorFunc, priority, preproc_id);}void *AddPreprocessorCheck(void (*func)(void)){    return (void *)AddFuncToConfigCheckList(func);}void DynamicDisableDetection(void *p){    DisableDetect((Packet *)p);}void DynamicDisableAllDetection(void *p){    DisableAllDetect((Packet *)p);}int DynamicDetect(void *p){    return Detect((Packet *)p);}int DynamicSetPreprocessorBit(void *p, unsigned int preprocId){    return SetPreprocBit((Packet *)p, preprocId);}int DynamicDropInline(void *p){    return InlineDrop((Packet *)p);}void *DynamicGetRuleClassByName(char *name){    return (void *)ClassTypeLookupByType(name);}void *DynamicGetRuleClassById(int id){    return (void *)ClassTypeLookupById(id);}void DynamicRegisterPreprocessorProfile(char *keyword, void *stats, int layer, void *parent){#ifdef PERF_PROFILING    RegisterPreprocessorProfile(keyword, (PreprocStats *)stats, layer, (PreprocStats *)parent);#endif}int DynamicProfilingPreprocs(){#ifdef PERF_PROFILING    return pv.profile_preprocs_flag;#else    return 0;#endif}int DynamicPreprocess(void *packet){    return Preprocess((Packet*)packet);}#ifndef DEBUGchar *no_file = "unknown";int no_line = 0;#endifint InitDynamicPreprocessors(){    int i;    DynamicPreprocessorData preprocData;    preprocData.version = PREPROCESSOR_DATA_VERSION;    preprocData.altBuffer = &DecodeBuffer[0];    preprocData.altBufferLen = DECODE_BLEN;    for (i=0;i<MAX_URIINFOS;i++)        preprocData.uriBuffers[i] = (UriInfo*)&UriBufs[i];    /* Pull this out of pv.dynamic_rules_path */    preprocData.logMsg = &LogMessage;    preprocData.errMsg = &ErrorMessage;    preprocData.fatalMsg = &FatalError;    preprocData.debugMsg = &DebugMessageFunc;#ifdef HAVE_WCHAR_H    preprocData.debugWideMsg = &DebugWideMessageFunc;#endif        preprocData.registerPreproc = &RegisterPreprocessor;    preprocData.addPreproc = &AddPreprocessor;    preprocData.addPreprocRestart = &AddFuncToPreprocRestartList;    preprocData.addPreprocExit = &AddFuncToPreprocCleanExitList;    preprocData.addPreprocConfCheck = &AddPreprocessorCheck;    preprocData.preprocOptRegister = &RegisterPreprocessorRuleOption;    preprocData.addPreprocProfileFunc = &DynamicRegisterPreprocessorProfile;    preprocData.profilingPreprocsFunc = &DynamicProfilingPreprocs;#ifdef PERF_PROFILING    preprocData.totalPerfStats = &totalPerfStats;#else    preprocData.totalPerfStats = NULL;#endif    preprocData.alertAdd = &SnortEventqAdd;    preprocData.thresholdCheck = &sfthreshold_test;    preprocData.inlineMode = &InlineMode;    preprocData.inlineDrop = &DynamicDropInline;    preprocData.detect = &DynamicDetect;    preprocData.disableDetect = &DynamicDisableDetection;    preprocData.disableAllDetect = &DynamicDisableAllDetection;    preprocData.setPreprocBit = &DynamicSetPreprocessorBit;    preprocData.streamAPI = stream_api;    preprocData.searchAPI = search_api;    preprocData.config_file = &file_name;    preprocData.config_line = &file_line;    preprocData.printfappend = &sfsnprintfappend;    preprocData.tokenSplit = &mSplit;    preprocData.tokenFree = &mSplitFree;    preprocData.getRuleInfoByName = &DynamicGetRuleClassByName;    preprocData.getRuleInfoById = &DynamicGetRuleClassById;    preprocData.preprocess = &DynamicPreprocess;#ifdef DEBUG    preprocData.debugMsgFile = &DebugMessageFile;    preprocData.debugMsgLine = &DebugMessageLine;#else    preprocData.debugMsgFile = &no_file;    preprocData.debugMsgLine = &no_line;#endif    preprocData.registerPreprocStats = &RegisterPreprocStats;    return InitDynamicPreprocessorPlugins(&preprocData);}int InitDynamicDetectionPlugins(){    DynamicDetectionPlugin *plugin;    VerifyDetectionPluginRequirements();    plugin = loadedDetectionPlugins;    while (plugin)    {        if (plugin->initFunc())        {            ErrorMessage("Failed to initialize dynamic detection library: "                    "%s version %d.%d.%d\n",                     plugin->metaData.uniqueName,                    plugin->metaData.major,                    plugin->metaData.minor,                    plugin->metaData.build);            return -1;        }        plugin = plugin->next;    }    return 0;}int DumpDetectionLibRules(){    DynamicDetectionPlugin *plugin = loadedDetectionPlugins;    DumpDetectionRules ruleDumpFunc = NULL;    int retVal = 0;    LogMessage("Dumping dynamic rules...\n");    while (plugin)    {        ruleDumpFunc = (DumpDetectionRules) getSymbol(plugin->handle, "DumpSkeletonRules", &(plugin->metaData), NONFATAL);        LogMessage("Dumping dynamic rules for Library %s %d.%d.%d\n",            plugin->metaData.uniqueName,            plugin->metaData.major,            plugin->metaData.minor,            plugin->metaData.build);        if (ruleDumpFunc != NULL)        {            if (ruleDumpFunc())            {                LogMessage("Failed to open rules file %s for writing\n");            }        }        plugin = plugin->next;    }    LogMessage("  Finished dumping dynamic rules.\n");    return retVal;}int LoadDynamicPreprocessor(char *library_name, int indent){    DynamicPluginMeta metaData;    /* Presume here, that library name is full path */    InitPreprocessorLibFunc preprocInit;    PluginHandle handle;    LogMessage("%sLoading dynamic preprocessor library %s... ",               indent ? "  " : "", library_name);    handle = openDynamicLibrary(library_name, 1);    metaData.libraryPath = library_name;    GetPluginVersion(handle, &metaData);    /* Just to ensure that the function exists */    preprocInit = (InitPreprocessorLibFunc) getSymbol(handle, "InitializePreprocessor", &metaData, FATAL);    if (metaData.type != TYPE_PREPROCESSOR)    {        CloseDynamicLibrary(handle);        LogMessage("failed, not a preprocessor library\n");        return 0;    }    AddPreprocessorPlugin(handle, preprocInit, &metaData);    LogMessage("done\n");    return 0;}void LoadAllDynamicPreprocessors(char *path){    LogMessage("Loading all dynamic preprocessor libs from %s...\n", path);    LoadAllLibs(path, LoadDynamicPreprocessor);    LogMessage("  Finished Loading all dynamic preprocessor libs from %s\n", path);}void CloseDynamicPreprocessorLibs(){    DynamicPreprocessorPlugin *plugin = loadedPreprocessorPlugins;    while (plugin)    {        CloseDynamicLibrary(plugin->handle);        plugin = plugin->next;    }}void *GetNextEnginePluginVersion(void *p){    DynamicEnginePlugin *lib = (DynamicEnginePlugin *) p;    if ( lib != NULL )    {        lib = lib->next;    }    else    {        lib = loadedEngines;    }    if ( lib == NULL )    {        return lib;    }    return (void *) lib;      }void *GetNextDetectionPluginVersion(void *p){    DynamicDetectionPlugin *lib = (DynamicDetectionPlugin *) p;    if ( lib != NULL )    {        lib = lib->next;    }    else    {        lib = loadedDetectionPlugins;    }    if ( lib == NULL )    {        return lib;    }    return (void *) lib;      }void *GetNextPreprocessorPluginVersion(void *p){    DynamicPreprocessorPlugin *lib = (DynamicPreprocessorPlugin *) p;    if ( lib != NULL )    {        lib = lib->next;    }    else    {        lib = loadedPreprocessorPlugins;    }    if ( lib == NULL )    {        return lib;    }    return (void *) lib;      }DynamicPluginMeta *GetDetectionPluginMetaData(void *p){    DynamicDetectionPlugin *lib = (DynamicDetectionPlugin *) p;    DynamicPluginMeta *meta;    meta = &(lib->metaData);    return meta;    }DynamicPluginMeta *GetEnginePluginMetaData(void *p){    DynamicEnginePlugin *lib = (DynamicEnginePlugin *) p;    DynamicPluginMeta *meta;    meta = &(lib->metaData);    return meta;    }DynamicPluginMeta *GetPreprocessorPluginMetaData(void *p){    DynamicPreprocessorPlugin *lib = (DynamicPreprocessorPlugin *) p;    DynamicPluginMeta *meta;    meta = &(lib->metaData);    return meta;    }#endif /* DYNAMIC_PLUGIN */

⌨️ 快捷键说明

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