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

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

?? sp_respond.c

?? 著名的入侵檢測系統snort的最新版本的源碼
?? C
字號:
/* $Id$ *//*** Copyright (C) 1998-2002 Martin Roesch <roesch@sourcefire.com>** Copyright (C) 1999,2000,2001 Christian Lademann <cal@zls.de>**** 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.*//* $Id$ *//* * CREDITS: * * The functionality presented here was inspired by * the program "couic" by Michel Arboi <arboi@bigfoot.com> **/#ifdef HAVE_CONFIG_H#include "config.h"#endif#if defined(ENABLE_RESPONSE) && !defined(ENABLE_RESPONSE2)#include <libnet.h>#include "decode.h"#include "rules.h"#include "plugbase.h"#include "parser.h"#include "debug.h"#include "util.h"#include "log.h"#include "plugin_enum.h"#include "snort.h"typedef struct _RespondData{    u_int response_flag;} RespondData;void RespondInit(char *, OptTreeNode *, int ); void RespondRestartFunction(int, void *);int ParseResponse(char *);int SendICMP_UNREACH(int, ip_p, ip_p, Packet *);int SendTCPRST(ip_p, ip_p, u_short, u_short, u_long, u_long, u_short);int Respond(Packet *, RspFpList *);int nd; /* raw socket descriptor */u_int8_t ttl;   /* placeholder for randomly generated TTL */u_int8_t *tcp_pkt;u_int8_t *icmp_pkt;void PrecacheTcp(void);void PrecacheIcmp(void);/************************************************************************** * * Function: SetupRespond(); * * Purpose: Initialize repsond plugin * * Arguments: None. * * Returns: void **************************************************************************/void SetupRespond(void){    RegisterPlugin("resp", RespondInit, OPT_TYPE_ACTION);    DEBUG_WRAP(DebugMessage(DEBUG_PLUGIN,"Plugin: Respond Setup\n"););    nd = -1;}void RespondRestartFunction(int signal, void *foo){    if (nd != -1)    {        libnet_close_raw_sock(nd);        nd = -1;    }    if (tcp_pkt != NULL)        libnet_destroy_packet((u_char **)&tcp_pkt);    if (icmp_pkt != NULL)        libnet_destroy_packet((u_char **)&icmp_pkt);    return;}void RespondInit(char *data, OptTreeNode *otn, int protocol) {    RespondData *rd;    if(protocol != IPPROTO_TCP && protocol != IPPROTO_UDP &&       protocol != IPPROTO_ICMP)    {        FatalError("%s(%d): Can't respond to IP protocol rules\n",                    file_name, file_line);    }    if(nd == -1) /* need to open it only once */    {        if((nd = libnet_open_raw_sock(IPPROTO_RAW)) < 0)        {            FatalError("cannot open raw socket for libnet, exiting...\n");        }    }    ttl = (u_int8_t)libnet_get_prand(PR8);    if(ttl < 64)    {        ttl += 64;    }     rd = (RespondData *)SnortAlloc(sizeof(RespondData));        rd->response_flag = ParseResponse(data);        AddRspFuncToList(Respond, otn, (void *)rd );    AddFuncToRestartList(RespondRestartFunction, NULL);    return;}/**************************************************************************** * * Function: ParseResponse(char *) * * Purpose: Figure out how to handle hostile connection attempts * * Arguments: type => string of comma-sepatared modifiers * * Returns: void function * ***************************************************************************/int ParseResponse(char *type){    char *p;    int response_flag;    int make_tcp = 0;    int make_icmp = 0;    while(isspace((int) *type))        type++;    if(!type || !(*type))        return 0;    response_flag = 0;    p = strtok(type, ",");    while(p)    {        if(!strncasecmp(p, "rst_snd", 7))        {            response_flag |= RESP_RST_SND;            make_tcp = 1;        }        else if(!strncasecmp(p, "rst_rcv", 7))        {            response_flag |= RESP_RST_RCV;            make_tcp = 1;        }        else if(!strncasecmp(p, "rst_all", 7))        {            response_flag |= (RESP_RST_SND | RESP_RST_RCV);            make_tcp = 1;        }        else if(!strncasecmp(p, "icmp_net", 8))        {            response_flag |= RESP_BAD_NET;            make_icmp = 1;        }        else if(!strncasecmp(p, "icmp_host", 9))        {            response_flag |= RESP_BAD_HOST;            make_icmp = 1;        }        else if(!strncasecmp(p, "icmp_port", 9))        {            response_flag |= RESP_BAD_PORT;            make_icmp = 1;        }        else if(!strncasecmp(p, "icmp_all", 9))        {            response_flag |= (RESP_BAD_NET | RESP_BAD_HOST | RESP_BAD_PORT);            make_icmp = 1;        }        else        {            FatalError("%s(%d): invalid response modifier: %s\n", file_name,                     file_line, p);        }        p = strtok(NULL, ",");    }    if(make_tcp)    {        PrecacheTcp();    }    if(make_icmp)    {        /* someday came sooner than expected. -Jeff */        PrecacheIcmp();    }    return response_flag;}void PrecacheTcp(void){    int sz = IP_H + TCP_H + 1;  /* extra octet required to avoid crash - why? */    if((tcp_pkt = calloc(sz, sizeof(u_int8_t))) == NULL)    {        FatalError("PrecacheTCP() calloc failed!\n");    }    libnet_build_ip( TCP_H                             /* Length of packet data */                   , 0                                 /* IP tos */                   , (u_short) libnet_get_prand(PRu16) /* IP ID */                   , 0                                 /* Fragmentation flags and offset */                   , ttl                               /* TTL */                   , IPPROTO_TCP                       /* Protocol */                   , 0                                 /* Source IP Address */                   , 0                                 /* Destination IP Address */                   , NULL                              /* Pointer to packet data (or NULL) */                   , 0                                 /* Packet payload size */                   , tcp_pkt                           /* Pointer to packet header memory */                   );    libnet_build_tcp( 0              /* Source port */                    , 0              /* Destination port */                    , 0              /* Sequence Number */                    , 0              /* Acknowledgement Number */                    , TH_RST|TH_ACK  /* Control bits */                    , 0              /* Advertised Window Size */                    , 0              /* Urgent Pointer */                    , NULL           /* Pointer to packet data (or NULL) */                    , 0              /* Packet payload size */                    , tcp_pkt + IP_H /* Pointer to packet header memory */                    );    return;}void PrecacheIcmp(void){    int sz = IP_H + ICMP_UNREACH_H + 68;    /* plan for IP options */    if((icmp_pkt = calloc(sz, sizeof(char))) == NULL)    {        FatalError("PrecacheIcmp() calloc failed!\n");    }    libnet_build_ip( ICMP_UNREACH_H                    /* Length of packet data */                   , 0                                 /* IP tos */                   , (u_short) libnet_get_prand(PRu16) /* IP ID */                   , 0                                 /* Fragmentation flags and offset */                   , ttl                               /* TTL */                   , IPPROTO_ICMP                      /* Protocol */                   , 0                                 /* Source IP Address */                   , 0                                 /* Destination IP Address */                   , NULL                              /* Pointer to packet data (or NULL) */                   , 0                                 /* Packet payload size */                   , icmp_pkt                          /* Pointer to packet header memory */                   );    libnet_build_icmp_unreach( 3                /* icmp type */                             , 0                /* icmp code */                             , 0                /* Original Length of packet data */                             , 0                /* Original IP tos */                             , 0                /* Original IP ID */                             , 0                /* Original Fragmentation flags and offset */                             , 0                /* Original TTL */                             , 0                /* Original Protocol */                             , 0                /* Original Source IP Address */                             , 0                /* Original Destination IP Address */                             , NULL             /* Pointer to original packet data (or NULL) */                             , 0                /* Packet payload size (or 0) */                             , icmp_pkt + IP_H  /* Pointer to packet header memory */                             );    return;}/**************************************************************************** * * Function: Respond(Packet *p, RspFpList) * * Purpose: Respond to hostile connection attempts * * Arguments: * * Returns: void function * ***************************************************************************/int Respond(Packet *p, RspFpList *fp_list){    RespondData *rd = (RespondData *)fp_list->params;    if(!IPH_IS_VALID(p))    {        return 0;    }        if(rd->response_flag)    {        if(rd->response_flag & (RESP_RST_SND | RESP_RST_RCV))        {            if(GET_IPH_PROTO(p) == IPPROTO_TCP && p->tcph != NULL)            {                /*                **  This ensures that we don't reset packets that we just                **  spoofed ourselves, thus inflicting a self-induced DOS                **  attack.                **                **  We still reset packets that may have the SYN set, though.                */                if((p->tcph->th_flags & (TH_SYN | TH_RST)) != TH_RST)                {                    if(rd->response_flag & RESP_RST_SND)                    {                        SendTCPRST(GET_DST_IP(p),                                    GET_SRC_IP(p),                                   p->tcph->th_dport, p->tcph->th_sport,                                   p->tcph->th_ack,                                    htonl(ntohl(p->tcph->th_seq) + p->dsize),                                   p->tcph->th_win);                    }                    if(rd->response_flag & RESP_RST_RCV)                    {                        SendTCPRST(GET_SRC_IP(p),                                    GET_DST_IP(p),                                   p->tcph->th_sport, p->tcph->th_dport,                                    p->tcph->th_seq,                                    htonl(ntohl(p->tcph->th_ack) + p->dsize),                                   p->tcph->th_win);                    }                }            }        }        /*        **  We check that we only reset packets with an ICMP packet if it is        **  valid.  This means that we don't reset ICMP error types and will        **  only reset ICMP query request.        */        if((p->icmph == NULL) ||            (p->icmph->type == ICMP_ECHO) ||           (p->icmph->type == ICMP_TIMESTAMP) ||            (p->icmph->type == ICMP_INFO_REQUEST) ||           (p->icmph->type == ICMP_ADDRESS))        {            if(rd->response_flag & RESP_BAD_NET)                SendICMP_UNREACH(ICMP_UNREACH_NET, GET_DST_IP(p),                                 GET_SRC_IP(p), p);            if(rd->response_flag & RESP_BAD_HOST)                SendICMP_UNREACH(ICMP_UNREACH_HOST, GET_DST_IP(p),                                 GET_SRC_IP(p), p);            if(rd->response_flag & RESP_BAD_PORT)                SendICMP_UNREACH(ICMP_UNREACH_PORT, GET_DST_IP(p),                                 GET_SRC_IP(p), p);        }    }    return 1; /* always success */}int SendICMP_UNREACH(int code, ip_p saddr, ip_p daddr, Packet * p){    int payload_len, sz;    IPHdr *iph;    ICMPHdr *icmph;    if(p == NULL)        return -1;    /* don't send ICMP port unreachable errors in response to ICMP messages */    if (GET_IPH_PROTO(p) == 1 && code == ICMP_UNREACH_PORT)    {        if (pv.verbose_flag)        {            ErrorMessage("ignoring icmp_port set on ICMP packet.\n");        }                return 0;    }    iph = (IPHdr *) icmp_pkt;    icmph = (ICMPHdr *) (icmp_pkt + IP_H);#ifdef SUP_IP6// XXX-IPv6 Not yet implemented - sp_respond.c#else    iph->ip_src.s_addr = saddr;    iph->ip_dst.s_addr = daddr;#endif    icmph->code = code;    if ((payload_len = ntohs(p->iph->ip_len) - (IP_HLEN(p->iph) << 2)) > 8)        payload_len = 8;    memcpy((char *)icmph + ICMP_UNREACH_H, p->iph, (IP_HLEN(p->iph) << 2)            + payload_len);    sz = IP_H + ICMP_UNREACH_H + (IP_HLEN(p->iph) << 2) + payload_len;    iph->ip_len = htons( (u_short) sz);    libnet_do_checksum(icmp_pkt, IPPROTO_ICMP, sz - IP_H);#ifdef DEBUG    DEBUG_WRAP(DebugMessage(DEBUG_PLUGIN, "firing ICMP response packet\n"););    PrintNetData(stdout, icmp_pkt, sz);    //ClearDumpBuf();#endif    if(libnet_write_ip(nd, icmp_pkt, sz) < sz)    {        libnet_error(LIBNET_ERR_CRITICAL, "SendICMP_UNREACH: libnet_write_ip");        return -1;    }    return 0;}int SendTCPRST(ip_p saddr, ip_p daddr, u_short sport, u_short dport,         u_long seq, u_long ack, u_short win){    int sz = IP_H + TCP_H;    IPHdr *iph;    TCPHdr *tcph;    iph = (IPHdr *) tcp_pkt;    tcph = (TCPHdr *) (tcp_pkt + IP_H);#ifdef SUP_IP6#else    iph->ip_src.s_addr = saddr;    iph->ip_dst.s_addr = daddr;#endif        tcph->th_sport = sport;    tcph->th_dport = dport;    tcph->th_seq = seq;    tcph->th_ack = ack;    tcph->th_win = 0;    libnet_do_checksum(tcp_pkt, IPPROTO_TCP, sz - IP_H);        DEBUG_WRAP(	       PrintNetData(stdout, tcp_pkt, sz);	       //ClearDumpBuf();	       DebugMessage(DEBUG_PLUGIN, "firing response packet\n");	       DebugMessage(DEBUG_PLUGIN,                   "0x%lX:%u -> 0x%lX:%d (seq: 0x%lX  ack: 0x%lX)\n",			        saddr, sport, daddr, dport, seq, ack););        if(libnet_write_ip(nd, tcp_pkt, sz) < sz)    {        libnet_error(LIBNET_ERR_CRITICAL, "SendTCPRST: libnet_write_ip");        return -1;    }    return 0;}#endif /* ENABLE_RESPONSE && !ENABLE_RESPONSE2 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲精品一区二区三区| 日本一区二区不卡视频| 亚洲国产成人av网| 在线免费亚洲电影| 亚洲视频在线一区| 99久久伊人精品| 国产精品久久久久久久久图文区| 风流少妇一区二区| 亚洲国产成人在线| 日韩欧美电影一区| 秋霞电影一区二区| 日韩一级黄色片| 精品一区二区三区在线播放| 日韩女优制服丝袜电影| 狠狠色丁香婷婷综合| 久久免费看少妇高潮| 国产乱码精品1区2区3区| 久久久三级国产网站| 国产在线精品国自产拍免费| 久久综合视频网| 国产成人免费在线观看| 国产精品国产三级国产aⅴ入口| 99久久免费视频.com| 一区二区三区日本| 欧美日韩www| 久久草av在线| 久久精品人人做人人综合| 成人国产视频在线观看| 日韩一区欧美小说| 欧美日韩精品一区二区在线播放| 日韩一区精品视频| 精品久久久网站| 不卡一区二区三区四区| 亚洲精品免费在线| 欧美日韩国产成人在线91| 美女视频黄a大片欧美| 久久精品视频在线免费观看| 91在线国产福利| 亚洲成人免费影院| 欧美不卡激情三级在线观看| 国产成人精品免费网站| 亚洲免费在线视频| 日韩午夜精品电影| 国产成a人亚洲| 一区二区免费在线| 日韩精品影音先锋| 不卡免费追剧大全电视剧网站| 一区二区欧美国产| 欧美va亚洲va在线观看蝴蝶网| 丰满少妇在线播放bd日韩电影| 亚洲男同性恋视频| 欧美一二三区在线| 成人国产精品免费观看动漫| 亚洲自拍与偷拍| 精品国产青草久久久久福利| av中文一区二区三区| 五月婷婷久久综合| 国产午夜精品久久| 欧美日本在线看| 国产91对白在线观看九色| 亚洲成人手机在线| 欧美国产国产综合| 911精品产国品一二三产区| 国产精品一区二区久久精品爱涩| 夜夜精品浪潮av一区二区三区| 精品88久久久久88久久久| 色综合欧美在线视频区| 久久99久久99小草精品免视看| 亚洲天堂免费在线观看视频| 91精品在线麻豆| 99久久久无码国产精品| 另类小说综合欧美亚洲| 亚洲综合999| 国产精品人成在线观看免费 | 国产福利一区二区三区| 一区二区三区免费在线观看| 久久久精品黄色| 欧美日韩国产电影| 99re这里只有精品首页| 精品综合久久久久久8888| 一区二区三区色| 国产欧美视频一区二区三区| 欧美久久久久久蜜桃| 99热精品国产| 国产盗摄一区二区| 日本不卡123| 亚洲午夜久久久久久久久电影网| 国产欧美日韩在线视频| 69久久99精品久久久久婷婷| 色婷婷综合久久久| 国产成a人亚洲| 国内精品久久久久影院色| 亚洲国产精品久久艾草纯爱 | 久久综合给合久久狠狠狠97色69| 欧美性生活一区| 91在线观看污| 国产不卡视频在线观看| 精品一区二区三区的国产在线播放| 亚洲一区二区在线免费观看视频| 国产精品家庭影院| 久久精品视频一区二区三区| 日韩精品一区二区三区四区| 欧美性感一区二区三区| 色综合天天综合| 成人国产一区二区三区精品| 国产精品123区| 精品一区二区国语对白| 美女脱光内衣内裤视频久久网站| 亚洲1区2区3区4区| 亚洲大片精品永久免费| 亚洲一区自拍偷拍| 亚洲主播在线播放| 亚洲精品国产视频| 中文字幕亚洲一区二区va在线| 国产欧美日韩精品一区| 久久午夜色播影院免费高清 | 在线91免费看| 欧美三日本三级三级在线播放| 91色porny蝌蚪| 成人免费视频免费观看| 国产黄色精品视频| 国产xxx精品视频大全| 国产一区二区三区综合| 精品一二三四在线| 精品一区二区三区影院在线午夜 | 7777精品伊人久久久大香线蕉的 | 一本大道久久精品懂色aⅴ| 成人国产精品免费观看视频| 丁香婷婷综合色啪| 不卡欧美aaaaa| 91在线视频免费91| 91亚洲精品久久久蜜桃网站| 99综合电影在线视频| 99热这里都是精品| 色天天综合色天天久久| 色视频成人在线观看免| 欧美在线观看视频一区二区 | 久久久精品免费免费| 久久精品视频一区二区三区| 国产日韩成人精品| 中文字幕精品综合| 国产精品久久久久国产精品日日| 国产精品午夜免费| 综合自拍亚洲综合图不卡区| 亚洲三级在线免费| 亚洲最大的成人av| 性做久久久久久免费观看| 日韩专区欧美专区| 麻豆国产一区二区| 国产精品亚洲а∨天堂免在线| 国产suv一区二区三区88区| fc2成人免费人成在线观看播放 | 国产亚洲精品aa午夜观看| 亚洲国产精品精华液ab| 亚洲欧美一区二区视频| 一区二区三区高清| 丝袜亚洲另类欧美| 国产一区二区三区不卡在线观看| 国产91精品露脸国语对白| 91理论电影在线观看| 欧美日韩精品专区| 久久婷婷久久一区二区三区| 国产精品无人区| 亚洲一区二区三区四区五区中文| 日本成人在线看| 国产精品1区2区3区在线观看| 99久久婷婷国产综合精品| 欧美三级日韩在线| 欧美变态tickling挠脚心| 国产精品麻豆欧美日韩ww| 亚洲国产精品影院| 国产真实乱子伦精品视频| 91免费视频观看| 日韩一级欧美一级| 国产精品高潮呻吟| 视频一区二区中文字幕| 国产一区二区在线观看视频| 91视频免费观看| 91精品欧美一区二区三区综合在| 国产亚洲精久久久久久| 亚洲一区在线电影| 国产在线播放一区| 日本久久精品电影| 欧美成人国产一区二区| 亚洲欧洲制服丝袜| 精品一区二区在线免费观看| 一本大道av一区二区在线播放| 日韩欧美的一区| 亚洲欧美区自拍先锋| 九色综合狠狠综合久久| 在线观看区一区二| 久久精品亚洲精品国产欧美| 亚洲国产一二三| 国产成人午夜片在线观看高清观看| 欧美三区在线视频| 国产精品伦一区二区三级视频| 日韩精品一二区| 色综合天天综合网天天看片| 2023国产精品| 亚洲妇熟xx妇色黄|