Responsive image

问题 B: 第2关:基于BF算法的网络入侵检测

问题 B: 第2关:基于BF算法的网络入侵检测

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 243
[提交][状态][讨论版][命题人:]

题目描述

随着互联网的飞速发展,网络安全问题日益严重。入侵检测技术是一种积极主动防御的安全保障技术,而Snort是其中基于规则匹配的一种入侵检测技术。Snort自1998年被发明以来,历经数年的迭代更新,Snort已成为一个具有多平台(Multi-Platform)、实时(Real-Time)流量分析、网络IP数据包(Pocket)记录等特性的强大的网络入侵检测/防御系统(Network Intrusion Detection/Prevention System),即NIDS/NIPS。

Snort首先需要使用者根据入侵行为的特征,按照一定的规范将这些特征编写成规则,最后通过检测网络数据与规则数据库中的规则是否匹配来判断入侵与否。在Snort入侵检测系统中,规则的匹配效率是影响Snort检测效率的关键。而规则匹配的核心技术是模式匹配算法。

请实现一个基于BF算法的模式匹配算法,用于网络入侵行为的检测。若检在网络日志中检测到任何一条检测规则中的ip地址,则输出“Intrusion.”,反之输出“No Intrusion.”

#include<iostream>
#include<cstring>
#include<sstream>
using namespace std;
int BF(string s,string t)
{//简单模式匹配算法,S为主串(目标串),T为子串(模式串)。
//匹配成功返回主串中所含子串第一次出现的位置,否则返回-1。
/**************begin************/





    /**************end************/
}
int main()
{
    int n,m;
    while (cin>>n>>m)//输入n条规则,并将其中的n个ip地址存放到ip数组,输入m条日志,并合并存放到log
    {
        cin.get();    
        string *rule=new string[n];  
        string log="";
        for(int i=0;i<n;i++)
        {
            string t;
            getline(cin,t);
            stringstream sss(t);  
            string pot,ip,msg;
            sss>>pot>>ip;
            rule[i]=ip.substr(3, ip.length() - 3);
        }
        for(int i=0;i<m;i++)
        {
            string t;
            getline(cin,t);
            log += t;
        }
        for(int i=0;i<n;i++)
        {
            if(BF(log,rule[i])!=-1)
            {
                cout<<"Intrusion."<<endl;
                return 0;
            }
        }
        cout<<"No Intrusion."<<endl;
        delete[] rule;  
        return 0;
    }
}


输入描述

输入共n + m + 1行,第1行两个整数n, m(n, m ≤ 100) 2 ~ n + 1行每行为一条检测规则。规则的格式为:

protocol:网络协议 ip:ip地址 msg:"附加信息"

n + 2 ~ n + m + 1行共m行,为网络日志内容。

输出描述

输出一行,若检在网络日志中检测到任何一条检测规则中的ip地址,则输出“Intrusion.”,反之输出“No Intrusion.”。

样例输入

3 3
protocol:tcp ip:225.93.118.39 msg:"Network intrusion detected."
protocol:tcp ip:152.213.218.150 msg:"Network intrusion detected."
protocol:tcp ip:181.164.101.231 msg:"Network intrusion detected."
Proto Recv-Q Send-Q Local-Address Foreign-Address State
tcp 0 0 36.51.200.67:95403 40.56.49.213:29716 LAST_ACK
tcp 0 0 215.142.133.153:49323 106.54.135.230:18487 CLOSED

样例输出

No Intrusion.

提示


组合提交代码,你仅需要提交





int BF(string s,string t)


{//简单模式匹配算法,S为主串(目标串),T为子串(模式串)。


//匹配成功返回主串中所含子串第一次出现的位置,否则返回-1。


/**************begin************/












    /**************end************/


}




[提交][状态]
ACM算法攻关部