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

📄 spp_sfportscan.c

📁 Linux snort-2.4.4源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
        case PS_PROTO_ICMP:        case PS_PROTO_IP:            if(MakeProtoInfo(proto, g_tmp_pkt->data, &ip_size))                return -1;            break;        case PS_PROTO_OPEN_PORT:            if(MakeOpenPortInfo(proto, g_tmp_pkt->data, &ip_size, user))                return -1;            break;        default:            return -1;    }    /*    **  Let's finish up the IP header and checksum.    */    g_tmp_pkt->iph->ip_len = htons((short)ip_size);    g_tmp_pkt->iph->ip_csum = 0;    g_tmp_pkt->iph->ip_csum =         in_chksum_ip((u_short *)g_tmp_pkt->iph, (IP_HLEN(g_tmp_pkt->iph)<<2));    /*    **  And we set the pcap headers correctly so they decode.    */    g_tmp_pkt->pkth->caplen = ip_size + ETHERNET_HEADER_LEN;    g_tmp_pkt->pkth->len    = ip_size + ETHERNET_HEADER_LEN;    return 0;}static int PortscanAlertTcp(Packet *p, PS_PROTO *proto, int proto_type){    int iCtr;    unsigned int event_ref;    int portsweep = 0;        if(!proto)        return -1;    switch(proto->alerts)    {        case PS_ALERT_ONE_TO_ONE:            event_ref = GeneratePSSnortEvent(p, GENERATOR_PSNG,                     PSNG_TCP_PORTSCAN, 0, 0, 3, PSNG_TCP_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY:            event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_TCP_DECOY_PORTSCAN,0,0,3,PSNG_TCP_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP:           event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                   PSNG_TCP_PORTSWEEP, 0, 0, 3, PSNG_TCP_PORTSWEEP_STR);           portsweep = 1;                      break;        case PS_ALERT_DISTRIBUTED:            event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_TCP_DISTRIBUTED_PORTSCAN, 0, 0, 3,                     PSNG_TCP_DISTRIBUTED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_FILTERED:            event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_TCP_FILTERED_PORTSCAN,0,0,3,                     PSNG_TCP_FILTERED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY_FILTERED:            event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_TCP_FILTERED_DECOY_PORTSCAN, 0,0,3,                     PSNG_TCP_FILTERED_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP_FILTERED:           event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                   PSNG_TCP_PORTSWEEP_FILTERED,0,0,3,                   PSNG_TCP_PORTSWEEP_FILTERED_STR);           portsweep = 1;           return 0;        case PS_ALERT_DISTRIBUTED_FILTERED:            event_ref = GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_TCP_FILTERED_DISTRIBUTED_PORTSCAN, 0, 0, 3,                     PSNG_TCP_FILTERED_DISTRIBUTED_PORTSCAN_STR);            break;        default:            return 0;    }    /*    **  Set the current event reference information for any open ports.    */    proto->event_ref  = event_ref;    proto->event_time.tv_sec  = p->pkth->ts.tv_sec;    proto->event_time.tv_usec = p->pkth->ts.tv_usec;    /*    **  Only log open ports for portsweeps after the alert has been    **  generated.    */    if(proto->open_ports_cnt && !portsweep)    {        for(iCtr = 0; iCtr < proto->open_ports_cnt; iCtr++)        {            PS_PKT ps_pkt;                                    memset(&ps_pkt, 0x00, sizeof(PS_PKT));            ps_pkt.pkt = (void *)p;            if(MakePortscanPkt(&ps_pkt, proto, PS_PROTO_OPEN_PORT,                         (void *)&proto->open_ports[iCtr]))                return -1;            g_tmp_pkt->pkth->ts.tv_usec += 1;            GenerateOpenPortEvent(g_tmp_pkt,GENERATOR_PSNG,PSNG_OPEN_PORT,                    0,0,3, proto->event_ref, &proto->event_time,                     PSNG_OPEN_PORT_STR);        }    }    return 0;}static int PortscanAlertUdp(Packet *p, PS_PROTO *proto, int proto_type){    if(!proto)        return -1;    switch(proto->alerts)    {        case PS_ALERT_ONE_TO_ONE:            GeneratePSSnortEvent(p, GENERATOR_PSNG, PSNG_UDP_PORTSCAN, 0, 0, 3,                    PSNG_UDP_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_DECOY_PORTSCAN, 0, 0, 3,                    PSNG_UDP_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_PORTSWEEP, 0, 0, 3,                    PSNG_UDP_PORTSWEEP_STR);            break;        case PS_ALERT_DISTRIBUTED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_DISTRIBUTED_PORTSCAN,                     0, 0, 3, PSNG_UDP_DISTRIBUTED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_FILTERED_PORTSCAN,0,0,3,                    PSNG_UDP_FILTERED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_FILTERED_DECOY_PORTSCAN,                    0,0,3, PSNG_UDP_FILTERED_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP_FILTERED:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_UDP_PORTSWEEP_FILTERED,0,0,3,                    PSNG_UDP_PORTSWEEP_FILTERED_STR);            break;        case PS_ALERT_DISTRIBUTED_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_UDP_FILTERED_DISTRIBUTED_PORTSCAN, 0, 0, 3,                     PSNG_UDP_FILTERED_DISTRIBUTED_PORTSCAN_STR);            break;        default:            break;    }    return 0;}static int PortscanAlertIp(Packet *p, PS_PROTO *proto, int proto_type){    if(!proto)        return -1;    switch(proto->alerts)    {        case PS_ALERT_ONE_TO_ONE:            GeneratePSSnortEvent(p, GENERATOR_PSNG, PSNG_IP_PORTSCAN, 0, 0, 3,                    PSNG_IP_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_DECOY_PORTSCAN, 0, 0, 3,                    PSNG_IP_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_PORTSWEEP, 0, 0, 3,                    PSNG_IP_PORTSWEEP_STR);            break;        case PS_ALERT_DISTRIBUTED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_DISTRIBUTED_PORTSCAN,                     0, 0, 3, PSNG_IP_DISTRIBUTED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_FILTERED_PORTSCAN,0,0,3,                    PSNG_IP_FILTERED_PORTSCAN_STR);            break;        case PS_ALERT_ONE_TO_ONE_DECOY_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_FILTERED_DECOY_PORTSCAN,                    0,0,3, PSNG_IP_FILTERED_DECOY_PORTSCAN_STR);            break;        case PS_ALERT_PORTSWEEP_FILTERED:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_IP_PORTSWEEP_FILTERED,0,0,3,                    PSNG_IP_PORTSWEEP_FILTERED_STR);            break;        case PS_ALERT_DISTRIBUTED_FILTERED:            GeneratePSSnortEvent(p,GENERATOR_PSNG,                    PSNG_IP_FILTERED_DISTRIBUTED_PORTSCAN, 0, 0, 3,                     PSNG_IP_FILTERED_DISTRIBUTED_PORTSCAN_STR);            break;        default:            break;    }    return 0;}static int PortscanAlertIcmp(Packet *p, PS_PROTO *proto, int proto_type){    if(!proto)        return -1;    switch(proto->alerts)    {        case PS_ALERT_PORTSWEEP:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_ICMP_PORTSWEEP, 0, 0, 3,                    PSNG_ICMP_PORTSWEEP_STR);            break;        case PS_ALERT_PORTSWEEP_FILTERED:           GeneratePSSnortEvent(p,GENERATOR_PSNG,PSNG_ICMP_PORTSWEEP_FILTERED,0,0,3,                    PSNG_ICMP_PORTSWEEP_FILTERED_STR);            break;        default:            break;    }    return 0;}static int PortscanAlert(PS_PKT *ps_pkt, PS_PROTO *proto, int proto_type){    Packet *p;    if(!ps_pkt || !ps_pkt->pkt)        return -1;    p = (Packet *)ps_pkt->pkt;        if(proto->alerts == PS_ALERT_OPEN_PORT)    {        if(MakePortscanPkt(ps_pkt, proto, PS_PROTO_OPEN_PORT, (void *)&p->sp))            return -1;        GenerateOpenPortEvent(g_tmp_pkt,GENERATOR_PSNG,PSNG_OPEN_PORT,0,0,3,                proto->event_ref, &proto->event_time, PSNG_OPEN_PORT_STR);    }    else    {        if(MakePortscanPkt(ps_pkt, proto, proto_type, NULL))            return -1;        switch(proto_type)        {            case PS_PROTO_TCP:                PortscanAlertTcp(g_tmp_pkt, proto, proto_type);                break;            case PS_PROTO_UDP:                PortscanAlertUdp(g_tmp_pkt, proto, proto_type);                break;            case PS_PROTO_ICMP:                PortscanAlertIcmp(g_tmp_pkt, proto, proto_type);                break;            case PS_PROTO_IP:                PortscanAlertIp(g_tmp_pkt, proto, proto_type);                break;        }    }    return 0;}static void PortscanDetect(Packet *p, void *context){    PS_PKT ps_pkt;    if(!p || !p->iph || (p->packet_flags & PKT_REBUILT_STREAM))        return;    if(!(p->preprocessors & PP_SFPORTSCAN))    {        return;    }    memset(&ps_pkt, 0x00, sizeof(PS_PKT));    ps_pkt.pkt = (void *)p;    ps_detect(&ps_pkt);    if(ps_pkt.scanner && ps_pkt.scanner->proto[ps_pkt.proto_idx].alerts &&            (ps_pkt.scanner->proto[ps_pkt.proto_idx].alerts != PS_ALERT_GENERATED))    {        PortscanAlert(&ps_pkt, &ps_pkt.scanner->proto[ps_pkt.proto_idx],                 ps_pkt.proto);    }    if(ps_pkt.scanned && ps_pkt.scanned->proto[ps_pkt.proto_idx].alerts &&            (ps_pkt.scanned->proto[ps_pkt.proto_idx].alerts != PS_ALERT_GENERATED))    {        PortscanAlert(&ps_pkt, &ps_pkt.scanned->proto[ps_pkt.proto_idx],                 ps_pkt.proto);    }    return;}static void FatalErrorNoOption(u_char *option){    FatalError("%s(%d) => No argument to '%s' config option.\n",             file_name, file_line, option);    return;}static void FatalErrorNoEnd(char *option){    FatalError("%s(%d) => No ending brace to '%s' config option.\n",             file_name, file_line, option);}static void FatalErrorInvalidArg(char *option){    FatalError("%s(%d) => Invalid argument to '%s' config option.\n",             file_name, file_line, option);}static void FatalErrorInvalidOption(char *option){    FatalError("%s(%d) => Invalid option '%s' to portscan preprocessor.\n",             file_name, file_line, option);}static void ParseProtos(int *protos){    char *pcTok;    if(!protos)        return;    *protos = 0;    pcTok = strtok(NULL, DELIMITERS);    while(pcTok)    {        if(!strcasecmp(pcTok, "tcp"))            *protos |= PS_PROTO_TCP;        else if(!strcasecmp(pcTok, "udp"))            *protos |= PS_PROTO_UDP;        else if(!strcasecmp(pcTok, "icmp"))            *protos |= PS_PROTO_ICMP;        else if(!strcasecmp(pcTok, "ip"))            *protos |= PS_PROTO_IP;        else if(!strcasecmp(pcTok, "all"))            *protos = PS_PROTO_ALL;        else if(!strcasecmp(pcTok, TOKEN_ARG_END))            return;

⌨️ 快捷键说明

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