亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sf_snort_plugin_loop.c

?? 著名的入侵檢測系統snort的最新版本的源碼
?? C
字號:
/* *  sf_snort_plugin_loop.c * * 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 Sourcefire Inc. * * Author: Steve Sturges *         Andy Mullican * * Date: 5/2005 * * * Loop Option operations for dynamic rule engine */#include "sf_snort_packet.h"#include "sf_snort_plugin_api.h"#include "sfghash.h"#include "sf_dynamic_engine.h"extern DynamicEngineData _ded;/* From sf_snort_plugin_api.c -- not exported from shared lib, * but available to other code within the shared lib. */extern int RegisterOneRule(Rule *rule, int registerRule);extern int ruleMatchInternal(SFSnortPacket *p, Rule* rule, u_int32_t optIndex, const u_int8_t **cursor);extern int getBuffer(SFSnortPacket *p, int flags, u_int8_t **start, u_int8_t **end);/* Initialize a byteExtract structure. */int ByteExtractInitialize(Rule *rule, ByteExtract *extractData){    int ret = 0;    void *memoryLocation;    if (rule->ruleData == NULL)    {        /* Initialize the hash table */        /* XXX: 3 rows ought to suffice for now... */        /* 3 rows,         * 0 bytes key size (ie, its a string),         * user provided keys,         * free func -- data is pointer to int         */        rule->ruleData = (void *)sfghash_new(3, 0, 1, free);    }    memoryLocation = sfghash_find((SFGHASH*)rule->ruleData, extractData->refId);    if (memoryLocation)    {        /* Cannot re-use refId */        DynamicEngineFatalMessage("Cannot re-use ByteExtract location '%s' for rule [%d:%d]\n",                                  extractData->refId, rule->info.genID, rule->info.sigID);        //return -1;    }    memoryLocation = calloc(sizeof(u_int32_t), 1);    if (memoryLocation == NULL)    {        DynamicEngineFatalMessage("Failed to allocate memory\n");    }    ret = sfghash_add((SFGHASH*)rule->ruleData, extractData->refId, memoryLocation);    if (ret != SFGHASH_OK)    {        free(memoryLocation);        /* Some error, couldn't allocate hash entry */        return -2;    }    extractData->memoryLocation = memoryLocation;    return 0;}int DynamicElementInitialize(Rule *rule, DynamicElement *element){    void *memoryLocation;    if (!rule->ruleData)    {        DynamicEngineFatalMessage("Runtime rule data location '%s' for rule [%d:%d] is unknown\n",                                  element->refId, rule->info.genID, rule->info.sigID);    }    switch (element->dynamicType)    {    case DYNAMIC_TYPE_INT_REF:        memoryLocation = sfghash_find((SFGHASH*)rule->ruleData, element->refId);        if (memoryLocation)        {            element->data.dynamicInt = memoryLocation;        }        else        {            element->data.dynamicInt = NULL;            DynamicEngineFatalMessage("Runtime rule data location '%s' for rule [%d:%d] is unknown\n",                                      element->refId, rule->info.genID, rule->info.sigID);            //return -1;        }        break;    case DYNAMIC_TYPE_INT_STATIC:    default:        /* nothing to do, its static */        break;    }    return 0;}int LoopInfoInitialize(Rule *rule, LoopInfo *loopInfo){    int ret;    /* Initialize the dynamic start, end, increment fields */    ret = DynamicElementInitialize(rule, loopInfo->start);    if (ret)    {        return ret;    }    ret = DynamicElementInitialize(rule, loopInfo->end);    if (ret)    {        return ret;    }    ret = DynamicElementInitialize(rule, loopInfo->increment);    if (ret)    {        return ret;    }    /* Do all of the initialization for the subrule */    ret = RegisterOneRule(loopInfo->subRule, DONT_REGISTER_RULE);    if (ret)    {        return ret;    }    /* This should always be relative. */    loopInfo->cursorAdjust->flags |= CONTENT_RELATIVE;    /* Anything else? */    return 0;}/*  *  Get buffer size remaining *  *          p: packet data structure, same as the one found in snort. *      flags: defines what kind of content buffer to look at *     cursor: current position within buffer * * Returns:  *    > 0 : size of buffer remaining *    = 0 : no buffer remaining *    < 0 : error * */int getSizeRemaining(void *p, u_int32_t flags, const u_int8_t *cursor){    u_int8_t *start;    u_int8_t *end;    SFSnortPacket *sp = (SFSnortPacket *) p;    int ret;    int size;    ret = getBuffer(sp, flags, &start, &end);    if ( ret < 0 )        return 0;    if ( cursor != NULL )    {        size = end - cursor;    }    else    {        size = end - start;    }    if ( size < 0 )        return -1;    return size;}/*  *  Get maximum loop iterations possible *  *          p: packet data structure, same as the one found in snort. *       loop: structure that defines buffer via flags, and has cursor increment *     cursor: current position within buffer * * Returns:  *    >= 0 : calculated max possible loop count *     < 0 : error * * Notes: *    This function is a sanity check on a loop count.  It presumes the caller is looking *    through a content buffer, cursor_increment hops at a time.  It calculates how many whole *    hops (plus a last partial hop) are possible given the remaining buffer size.  Passing in *    a cursor of NULL means look at the whole buffer. * */int32_t getLoopLimit(void *p, LoopInfo *loop, const u_int8_t *cursor){    int32_t loop_max;    int size;    size = getSizeRemaining(p, loop->cursorAdjust->flags, cursor);    if ( size < 0 )        return -1;    /* Calculate how many whole hops are within buffer */    loop_max = size/(loop->cursorAdjust->offset);    /* Add one for partial hop remaining */    if ( size%(loop->cursorAdjust->offset) != 0 )        loop_max++;    /* Sanity check; limit size to 65535 */    return loop_max & 0xFFFF;}int checkLoopEnd(u_int32_t op, int32_t index, int32_t end){    switch (op)    {        case CHECK_EQ:            if (index == end)                return 1;            break;        case CHECK_NEQ:            if (index != end)                return 1;            break;        case CHECK_LT:            if (index < end)                return 1;            break;        case CHECK_GT:            if (index > end)                return 1;            break;        case CHECK_LTE:            if (index <= end)                return 1;            break;        case CHECK_GTE:            if (index >= end)                return 1;            break;        case CHECK_AND:        case CHECK_ATLEASTONE:            if ((index & end) != 0)                return 1;            break;        case CHECK_XOR:            if ((index ^ end) != 0)                return 1;            break;        case CHECK_ALL:            if ((index & end) == index)                return 1;            break;        case CHECK_NONE:            if ((index & end) == 0)                return 1;            break;    }    return 0;}/* Function to evaluate a loop (ie, a series of nested options) */ENGINE_LINKAGE int loopEval(void *p, LoopInfo *loop, const u_int8_t **cursor){    const u_int8_t *startingCursor;    const u_int8_t *tmpCursor;    int32_t i;    int32_t startValue;    int32_t endValue;    int32_t incrementValue;    int maxIterations, iterationCount = 0;    int ret = RULE_NOMATCH;    if (!cursor || !*cursor)        return RULE_NOMATCH;    /* Protect ourselves... */    if (!loop->initialized)        return RULE_NOMATCH;    tmpCursor = startingCursor = *cursor;    if (loop->start->dynamicType == DYNAMIC_TYPE_INT_STATIC)        startValue = loop->start->data.staticInt;    else        startValue = *(loop->start->data.dynamicInt);       if (loop->end->dynamicType == DYNAMIC_TYPE_INT_STATIC)        endValue = loop->end->data.staticInt;    else        endValue = *(loop->end->data.dynamicInt);    if (loop->increment->dynamicType == DYNAMIC_TYPE_INT_STATIC)        incrementValue = loop->increment->data.staticInt;    else        incrementValue = *(loop->increment->data.dynamicInt);    /* determine max iterations - based on current cursor position,     * relative to the appropriate buffer */    maxIterations = getLoopLimit(p, loop, startingCursor);    for (i=startValue;         checkLoopEnd(loop->op, i, endValue) && (iterationCount < maxIterations);         i+= incrementValue)    {        /* Evaluate the options from the sub rule */        ret = ruleMatchInternal(p, loop->subRule, 0, &tmpCursor);        if (ret > RULE_NOMATCH)        {            *cursor = tmpCursor;            return ret;        }        /* Adjust the starting cursor as specified... */        tmpCursor = startingCursor;        ret = setCursor(p, loop->cursorAdjust, &tmpCursor);        if (ret != RULE_MATCH)        {            /* ie, cursor went out of bounds */            return ret;        }        /* And save off the starting cursor */        startingCursor = tmpCursor;        iterationCount++;    }    return RULE_NOMATCH;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最色的网站| 日韩一区二区电影| 日本韩国一区二区三区| 欧美三级三级三级爽爽爽| 一本到不卡免费一区二区| 欧美一区二区日韩一区二区| 国产精品国模大尺度视频| 免费成人美女在线观看| 99久久精品国产毛片| 欧美一区二区私人影院日本| 国产精品久久午夜| 九九国产精品视频| 欧美三级韩国三级日本一级| 国产精品的网站| 91免费版在线看| 久久婷婷成人综合色| 久久国产精品一区二区| 欧美性生交片4| 国产欧美视频一区二区三区| 欧美乱熟臀69xxxxxx| 亚洲综合在线电影| 99精品久久只有精品| 欧美mv和日韩mv的网站| 亚洲一区二区视频在线| 色天天综合色天天久久| 亚洲欧美偷拍三级| 久久久www成人免费毛片麻豆| 一区二区三区波多野结衣在线观看| 国产不卡在线播放| 欧美精品一区二区在线播放| 亚洲国产一区二区视频| 欧美日韩视频在线一区二区| 尤物av一区二区| 成人av在线一区二区三区| 久久婷婷色综合| 成人性生交大合| 欧美精选午夜久久久乱码6080| 国产成人免费xxxxxxxx| 欧美日本一区二区三区| 亚洲r级在线视频| 欧美一级二级在线观看| 久久国产福利国产秒拍| 久久久久久一二三区| 成人黄色av电影| 成人欧美一区二区三区小说| 91小视频在线| 亚洲三级小视频| 在线一区二区三区| 首页国产丝袜综合| 久久综合色婷婷| 成人福利视频在线| 国产欧美综合色| 成人av手机在线观看| 亚洲精品国产无天堂网2021| 欧美日韩在线精品一区二区三区激情 | 5566中文字幕一区二区电影| 肉色丝袜一区二区| 欧美成人一区二区| 成人动漫一区二区| 亚洲最新视频在线播放| 欧美亚洲日本一区| 视频在线观看一区| 精品国产乱码久久久久久1区2区| 国产一区二区女| 亚洲精品久久久蜜桃| 91蜜桃免费观看视频| 视频一区免费在线观看| 国产欧美一区二区精品久导航 | 欧美体内she精高潮| 一级女性全黄久久生活片免费| 欧美日本一道本| 偷窥国产亚洲免费视频| 91.com视频| 国产精品亚洲综合一区在线观看| 精品播放一区二区| 欧美日韩一区高清| 五月天亚洲婷婷| 7878成人国产在线观看| 国产综合久久久久久鬼色| 亚洲天堂免费看| 日韩一区二区精品| 99免费精品视频| 精品亚洲porn| 日韩国产欧美在线视频| 亚洲色图一区二区| 久久精品亚洲一区二区三区浴池| 欧美优质美女网站| 成人va在线观看| 久久91精品久久久久久秒播| 亚洲大片精品永久免费| 中文字幕日本不卡| 久久久国产精品麻豆| 欧美日韩国产色站一区二区三区| 亚洲国产日韩精品| 成人欧美一区二区三区视频网页| 91麻豆精品国产自产在线| 日本久久一区二区| 91在线高清观看| 成人v精品蜜桃久久一区| 国产精选一区二区三区| 美女国产一区二区三区| 亚洲成人www| 亚洲一级二级在线| 一区二区三区在线影院| 亚洲人成在线观看一区二区| 中文字幕一区在线观看| 久久精品一区二区三区不卡牛牛 | 国产婷婷色一区二区三区| 日韩视频免费观看高清完整版| 欧美三级电影一区| 欧美无砖专区一中文字| 欧洲一区在线电影| 99久久精品免费| 97se狠狠狠综合亚洲狠狠| 成人国产电影网| 成人免费av网站| 成人丝袜18视频在线观看| 国产v日产∨综合v精品视频| 国产一区二区三区免费看| 国产精品自在欧美一区| 国产高清成人在线| 国产成人在线视频免费播放| 国产精品传媒入口麻豆| 久久久久国产精品人| 国产无人区一区二区三区| 国产亚洲综合色| 国产精品不卡视频| 中文字幕精品一区二区精品绿巨人| 欧美tickling挠脚心丨vk| 精品国产百合女同互慰| 久久久久久99久久久精品网站| 国产精品视频一二| 亚洲裸体xxx| 亚洲美女区一区| 日韩主播视频在线| 国模少妇一区二区三区| 久久97超碰国产精品超碰| 国产精品1024| 成人视屏免费看| 欧美色综合网站| 精品盗摄一区二区三区| 综合精品久久久| 午夜精品影院在线观看| 黑人巨大精品欧美黑白配亚洲| 成人午夜大片免费观看| 欧美三区在线观看| 久久影院视频免费| 亚洲色图欧洲色图婷婷| 日本人妖一区二区| 成人污视频在线观看| 欧美一区在线视频| 国产精品女主播av| 肉色丝袜一区二区| heyzo一本久久综合| 91精品免费在线观看| 久久夜色精品国产噜噜av| 亚洲靠逼com| 国产一区二区免费看| 色av综合在线| 国产亚洲福利社区一区| 性感美女极品91精品| 成人黄动漫网站免费app| 欧美精品久久久久久久久老牛影院| 国产欧美日韩综合| 日韩电影免费在线| 国产一区91精品张津瑜| 色婷婷久久久久swag精品| 日韩视频一区二区三区在线播放| 久久蜜桃av一区精品变态类天堂| 亚洲欧洲日本在线| 欧美aaaaaa午夜精品| 色综合天天综合网国产成人综合天| 高清免费成人av| 99精品在线观看视频| 日韩精品一区二区三区中文精品| 国产精品国产三级国产aⅴ原创| 免费欧美日韩国产三级电影| 色综合 综合色| 精品日韩在线一区| 舔着乳尖日韩一区| 精品一区二区三区免费视频| 欧美日韩一区 二区 三区 久久精品| 国产日韩欧美不卡| 蜜臀a∨国产成人精品| 欧美日韩国产高清一区二区三区| 亚洲色图制服丝袜| 99久久免费视频.com| 中文字幕精品一区二区三区精品| 国产麻豆成人传媒免费观看| 日韩久久久精品| 麻豆91免费看| 日韩免费一区二区| 看片网站欧美日韩| 欧美大片在线观看| 日韩激情av在线| 91精品一区二区三区在线观看| 午夜精品福利一区二区蜜股av| 欧美日韩精品一区二区三区蜜桃 | 欧美老人xxxx18| 亚洲图片欧美一区|