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

📄 spp_smtp.c

📁 入侵检测SNORT.最近更新的基于网络检测的IDS.希望能给大家带来方便.
💻 C
字号:
/**************************************************************************** * * Copyright (C) 2005-2008 Sourcefire Inc. * * 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. * ****************************************************************************/ /************************************************************************** * * spp_smtp.c * * Author: Andy Mullican * * Description: * * This file initializes SMTP as a Snort preprocessor. * * This file registers the SMTP initialization function, * adds the SMTP function into the preprocessor list. * * In general, this file is a wrapper to SMTP functionality, * by interfacing with the Snort preprocessor functions.  The rest * of SMTP should be separate from the preprocessor hooks. * **************************************************************************/#include <sys/types.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include "spp_smtp.h"#include "snort_smtp.h"#include "smtp_config.h"#include "smtp_log.h"#include "preprocids.h"#include "sf_snort_packet.h"#include "sf_dynamic_preprocessor.h"#include "debug.h"#include "profiler.h"#ifdef PERF_PROFILINGPreprocStats smtpPerfStats;PreprocStats smtpDetectPerfStats;int smtpDetectCalled = 0;#endifextern DynamicPreprocessorData _dpd;extern SMTP _smtp_no_session;extern int _smtp_check_gaps;static void SMTPInit(char *);static void SMTP_XLINK_Init(char *);static void SMTPDetect(void *, void *context);static void SMTPCleanExitFunction(int, void *);static void SMTPRestartFunction(int, void *);static void SMTPResetFunction(int, void *);static void SMTPResetStatsFunction(int, void *);/* * Function: SetupSMTP() * * Purpose: Registers the preprocessor keyword and initialization  *          function into the preprocessor list.  This is the function that *          gets called from InitPreprocessors() in plugbase.c. * * Arguments: None. * * Returns: void function * */void SetupSMTP(void){    /* link the preprocessor keyword to the init function in the preproc list */    _dpd.registerPreproc("smtp", SMTPInit);    _dpd.registerPreproc("xlink2state", SMTP_XLINK_Init);}/* * Function: SMTPInit(char *) * * Purpose: Calls the argument parsing function, performs final setup on data *          structs, links the preproc function into the function list. * * Arguments: args => ptr to argument string * * Returns: void function * */static void SMTPInit(char *args){    static int config_done = 0;    if (config_done)    {        DynamicPreprocessorFatalMessage("Can only configure SMTP preprocessor once.\n");    }    if (!_dpd.streamAPI)    {        DynamicPreprocessorFatalMessage("Streaming & reassembly must be enabled "                                        "for SMTP preprocessor\n");    }    if (_dpd.streamAPI->version >= STREAM_API_VERSION5)        _smtp_check_gaps = 1;    else        _smtp_check_gaps = 0;    SMTP_InitCmds();    SMTP_ParseArgs(args);    /* initialize the searches - command, headers, data, etc. */    SMTP_SearchInit();    /* zero out static SMTP global used for stateless SMTP or if there     * is no session pointer */    memset(&_smtp_no_session, 0, sizeof(SMTP));    /* Put the preprocessor function into the function list */    _dpd.addPreproc(SMTPDetect, PRIORITY_APPLICATION, PP_SMTP);    _dpd.addPreprocExit(SMTPCleanExitFunction, NULL, PRIORITY_LAST, PP_SMTP);    _dpd.addPreprocRestart(SMTPRestartFunction, NULL, PRIORITY_LAST, PP_SMTP);    _dpd.addPreprocReset(SMTPResetFunction, NULL, PRIORITY_LAST, PP_SMTP);    _dpd.addPreprocResetStats(SMTPResetStatsFunction, NULL, PRIORITY_LAST, PP_SMTP);#ifdef PERF_PROFILING    _dpd.addPreprocProfileFunc("smtp", (void*)&smtpPerfStats, 0, _dpd.totalPerfStats);        #endif    config_done = 1;}/* * Function: SMTP_XLINK_Init(char *) * * Purpose: Dummy function to make upgrade easier.  If preprocessor *           xlink2state is configured in snort.conf, just ignore it.  * * Arguments: args => ptr to argument string * * Returns: void function * */static void SMTP_XLINK_Init(char *args){    return;}/* * Function: SMTPDetect(void *, void *) * * Purpose: Perform the preprocessor's intended function.  This can be *          simple (statistics collection) or complex (IP defragmentation) *          as you like.  Try not to destroy the performance of the whole *          system by trying to do too much.... * * Arguments: p => pointer to the current packet data struct  * * Returns: void function * */static void SMTPDetect(void *pkt, void *context){    SFSnortPacket *p = (SFSnortPacket *)pkt;    PROFILE_VARS;    if (!IsTCP(p))    {        return;    }    /* Make sure it's traffic we're interested in */    if (!SMTP_IsServer(p->src_port) && !SMTP_IsServer(p->dst_port))    {        return;    }    PREPROC_PROFILE_START(smtpPerfStats);    DEBUG_WRAP(DebugMessage(DEBUG_SMTP, "SMTP Start (((((((((((((((((((((((((((((((((((((((\n"););    SnortSMTP(p);    DEBUG_WRAP(DebugMessage(DEBUG_SMTP, "SMTP End )))))))))))))))))))))))))))))))))))))))))\n\n"););    PREPROC_PROFILE_END(smtpPerfStats);#ifdef PERF_PROFILING    if (smtpDetectCalled)    {        smtpPerfStats.ticks -= smtpDetectPerfStats.ticks;        /* And Reset ticks to 0 */        smtpDetectPerfStats.ticks = 0;        smtpDetectCalled = 0;    }#endif}/*  * Function: SMTPCleanExitFunction(int, void *) * * Purpose: This function gets called when Snort is exiting, if there's *          any cleanup that needs to be performed (e.g. closing files) *          it should be done here. * * Arguments: signal => the code of the signal that was issued to Snort *            data => any arguments or data structs linked to this  *                    function when it was registered, may be *                    needed to properly exit *        * Returns: void function */                   static void SMTPCleanExitFunction(int signal, void *data){        SMTP_Free();}/*  * Function: SMTPRestartFunction(int, void *) * * Purpose: This function gets called when Snort is restarting on a SIGHUP, *          if there's any initialization or cleanup that needs to happen *          it should be done here. * * Arguments: signal => the code of the signal that was issued to Snort *            data => any arguments or data structs linked to this  *                    functioin when it was registered, may be *                    needed to properly exit *        * Returns: void function */                   static void SMTPRestartFunction(int signal, void *foo){    return;}static void SMTPResetFunction(int signal, void *data){    return;}static void SMTPResetStatsFunction(int signal, void *data){    return;}

⌨️ 快捷键说明

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