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

📄 snort_stream5_tcp.c

📁 著名的入侵检测系统snort的最新版本的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (!host_entry || !host_entry->hostInfo.streamPolicyName)        return 0;    host_entry->hostInfo.streamPolicy = StreamPolicyIdFromName(host_entry->hostInfo.streamPolicyName);    host_entry->hostInfo.streamPolicySet = 1;    STREAM5_DEBUG_WRAP(        DebugMessage(DEBUG_STREAM_STATE,            "STREAM5 INIT: %s(%d) for Entry %s:%s:%s (%s)\n",            reassembly_policy_names[host_entry->hostInfo.streamPolicy],            host_entry->hostInfo.streamPolicy,            host_entry->hostInfo.operatingSystem.value.s_value,            host_entry->hostInfo.vendor.value.s_value,            host_entry->hostInfo.version.value.s_value,            host_entry->hostInfo.streamPolicyName););    return 0;}#endifint Stream5VerifyTcpConfig(){    if (!tcp_lws_cache)    {        LogMessage("WARNING: Stream5 TCP Session Cache not initialized\n");        return -1;    }    if (numTcpPolicies < 1)    {        LogMessage("WARNING: Stream5 TCP no policies specified in configuration\n");        return -1;    }    if (!(s5_global_config.flags & STREAM5_CONFIG_DEFAULT_TCP_POLICY_SET))    {        LogMessage("WARNING: Stream5 TCP default policy not specified in configuration\n");        return -1;    }    /* Do this now     * verify config is called after all preprocs (static & dynamic)     * are inited.  Gives us the correct number of bits for     * p->preprocessor_bits     */    if (!s5_pkt)        Stream5InitPacket();#ifdef TARGET_BASED    SFAT_SetPolicyIds(StreamPolicyIdFromHostAttributeEntry);#endif    return 0;}void Stream5CleanTcp(){    DecoderFlags decoder_flags;    int policyIndex;    Stream5TcpPolicy *policy = NULL;    /* Turn off decoder alerts since we're decoding stored     * packets that we already alerted on.     */    memcpy(&decoder_flags, &pv.decoder_flags, sizeof(DecoderFlags));    memset(&pv.decoder_flags, 0, sizeof(DecoderFlags));    /* Set s5_tcp_cleanup to force a flush of all queued data */    s5_tcp_cleanup = 1;    /* Clean up hash table -- delete all sessions */    PurgeLWSessionCache(tcp_lws_cache);    tcp_lws_cache = NULL;    /* Cleanup the rebuilt packet */    if (s5_pkt)    {        free((void *)s5_pkt->pkth);        boFreeBITOP(s5_pkt->preprocessor_bits);        free(s5_pkt->preprocessor_bits);        free(s5_pkt);        s5_pkt = NULL;    }#ifdef SUP_IP6    if (s5_pkt_6)    {        free((void *)s5_pkt_6->pkth);        free(s5_pkt_6->preprocessor_bits);        free(s5_pkt_6);        s5_pkt_6 = NULL;    }#endif    /* Reset this */    s5_tcp_cleanup = 0;    mempool_destroy(&tcp_session_mempool);    /* And turn decoder alerts back on (or whatever they were set to) */    memcpy(&pv.decoder_flags, &decoder_flags, sizeof(DecoderFlags));    /* Cleanup TCP Policies and the list */    for (policyIndex = 0; policyIndex < numTcpPolicies; policyIndex++)    {        policy = tcpPolicyList[policyIndex];        free(policy->flush_point_list.flush_points);        free(policy->bound_addrs);        free(policy);    }    free(tcpPolicyList);    tcpPolicyList = NULL;}#ifdef DEBUG_STREAM5static void PrintStateMgr(StateMgr *s){    LogMessage("StateMgr:\n");    LogMessage("    state:          %s\n", state_names[s->state]);    LogMessage("    state_queue:    %s\n", state_names[s->state_queue]);    LogMessage("    expected_flags: 0x%X\n", s->expected_flags);    LogMessage("    transition_seq: 0x%X\n", s->transition_seq);    LogMessage("    stq_get_seq:    %d\n", s->stq_get_seq);}static void PrintStreamTracker(StreamTracker *s){    LogMessage(" + StreamTracker +\n");    LogMessage("    isn:                0x%X\n", s->isn);    LogMessage("    ttl:                %d\n", s->ttl);    LogMessage("    ts_last:            %lu\n", s->ts_last);    LogMessage("    wscale:             %lu\n", s->wscale);    LogMessage("    mss:                0x%08X\n", s->mss);    LogMessage("    l_unackd:           %X\n", s->l_unackd);    LogMessage("    l_nxt_seq:          %X\n", s->l_nxt_seq);    LogMessage("    l_window:           %lu\n", s->l_window);    LogMessage("    r_nxt_ack:          %X\n", s->r_nxt_ack);    LogMessage("    r_win_base:         %X\n", s->r_win_base);    LogMessage("    seglist_base_seq:   %X\n", s->seglist_base_seq);    LogMessage("    seglist:            %p\n", s->seglist);    LogMessage("    seglist_tail:       %p\n", s->seglist_tail);    LogMessage("    seg_count:          %d\n", s->seg_count);    LogMessage("    seg_bytes_total:    %d\n", s->seg_bytes_total);    LogMessage("    seg_bytes_logical:  %d\n", s->seg_bytes_logical);    PrintStateMgr(&s->s_mgr);}static void PrintTcpSession(TcpSession *ts){    LogMessage("TcpSession:\n");#ifdef DEBUG    LogMessage("    ssn_time:           %lu\n", ts->ssn_time.tv_sec);#endif    LogMessage("    server IP:          0x%08X\n", ts->tcp_server_ip);    LogMessage("    client IP:          0x%08X\n", ts->tcp_client_ip);    LogMessage("    server port:        %d\n", ts->tcp_server_port);    LogMessage("    client port:        %d\n", ts->tcp_client_port);    LogMessage("    flags:              0x%X\n", ts->lwssn->session_flags);    LogMessage("Client Tracker:\n");    PrintStreamTracker(&ts->client);    LogMessage("Server Tracker:\n");    PrintStreamTracker(&ts->server);}static void PrintTcpDataBlock(TcpDataBlock *tdb){    LogMessage("TcpDataBlock:\n");    LogMessage("    sip:    0x%08X\n", tdb->sip);    LogMessage("    dip:    0x%08X\n", tdb->dip);    LogMessage("    seq:    0x%08X\n", tdb->seq);    LogMessage("    ack:    0x%08X\n", tdb->ack);    LogMessage("    win:    %d\n", tdb->win);    LogMessage("    end:    0x%08X\n", tdb->end_seq);}static void PrintFlushMgr(FlushMgr *fm){    if(fm == NULL)        return;    switch(fm->flush_policy)    {        case STREAM_FLPOLICY_NONE:             STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    NONE\n"););            break;        case STREAM_FLPOLICY_FOOTPRINT:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    FOOTPRINT %d\n", fm->flush_pt););            break;        case STREAM_FLPOLICY_LOGICAL:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    LOGICAL %d\n", fm->flush_pt););            break;        case STREAM_FLPOLICY_RESPONSE:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    RESPONSE\n"););            break;        case STREAM_FLPOLICY_SLIDING_WINDOW:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    SLIDING_WINDOW %d\n", fm->flush_pt););            break;#if 0        case STREAM_FLPOLICY_CONSUMED:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "          CONSUMED %d\n", fm->flush_pt););            break;#endif        case STREAM_FLPOLICY_IGNORE:            STREAM5_DEBUG_WRAP(DebugMessage(DEBUG_STREAM_STATE,                        "    IGNORE\n"););            break;    }}#endifstatic INLINE void EventSynOnEst(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_SYN_ON_EST,                 /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_SYN_ON_EST_STR,             /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventExcessiveOverlap(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_EXCESSIVE_TCP_OVERLAPS,     /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_EXCESSIVE_TCP_OVERLAPS_STR, /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventBadTimestamp(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_BAD_TIMESTAMP,              /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_BAD_TIMESTAMP_STR,          /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventWindowTooLarge(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_WINDOW_TOO_LARGE,           /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_WINDOW_TOO_LARGE_STR,       /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventDataOnSyn(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_DATA_ON_SYN,                /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_DATA_ON_SYN_STR,            /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventDataOnClosed(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_DATA_ON_CLOSED,             /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_DATA_ON_CLOSED_STR,         /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventDataAfterReset(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_DATA_AFTER_RESET,           /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_DATA_AFTER_RESET_STR,       /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventBadSegment(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_BAD_SEGMENT,                /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_BAD_SEGMENT_STR,            /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventSessionHijackedClient(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_SESSION_HIJACKED_CLIENT,    /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            STREAM5_SESSION_HIJACKED_CLIENT_STR, /* event msg */            NULL);                              /* rule info ptr */}static INLINE void EventSessionHijackedServer(Stream5TcpPolicy *s5TcpPolicy){    if(!(s5TcpPolicy->flags & STREAM5_CONFIG_ENABLE_ALERTS))        return;    s5stats.events++;    SnortEventqAdd(GENERATOR_SPP_STREAM5,       /* GID */            STREAM5_SESSION_HIJACKED_SERVER,    /* SID */            1,                                  /* rev */            0,                                  /* class */            3,                                  /* priority */            

⌨️ 快捷键说明

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