hrbust 入侵检测 (kmp)

Description

入侵检测(Intrusion Detection)是对入侵行为的检测。它通过收集和分析网络行为、安全日志、审计数据、其它网络上可以获得的信息以及计算机系统中若干关键点的信息,检查网络或系统中是否存在违反安全策略的行为和被攻击的迹象。入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。因此被认为是防火墙之后的第二道安全闸门,在不影响网络性能的情况下能对网络进行监测。入侵检测通过执行以下任务来实现:监视、分析用户及系统活动;系统构造和弱点的审计;识别反映已知进攻的活动模式并向相关人士报警;异常行为模式的统计分析;评估重要系统和数据文件的完整性;操作系统的审计跟踪管理,并识别用户违反安全策略的行为。

其中特征检测(Signature-based detection) 又称Misuse detection 假设入侵者活动可以用一种模式来表示,系统的目标是检测主体活动是否符合这些模式。它可以将已有的入侵方法检查出来。

现在给出主体活动和一个入侵者活动,判断改主体活动是否包含该入侵者活动。

Input

每行两个字符串,表示主体活动和入侵者活动,主体活动串不长与200000,入侵者活动串不长于2000

Output

如果主体活动包含入侵活动,输出”yes”,否则输出”no”,并换行。

Sample Input

abcdefg

abcd

abcde

bcdef

Sample Output

yes

no

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAX 200050
 4 #define MAX2 2005
 5 char s[MAX];
 6 char t[MAX2];
 7 int next[MAX2];
 8 int len1,len2;
 9 void findnext();
10 int kmp();
11 int main()
12 {
13     while(scanf("%s%s",s,t)!=EOF)
14     {
15         len1=strlen(s);
16         len2=strlen(t);
17         findnext();//在这需要在定义
18         if(kmp()) printf("yes\n");
19         else printf("no\n");
20     }
21     return 0;
22 }
23 void findnext()
24 {
25     int j=0,k=-1;
26      next[0]=-1;
27     while(j<len2)
28     {
29         if(k==-1||t[j]==t[k])
30         {
31             j++;k++;
32             if(t[j]!=t[k])
33                 next[j]=k;
34             else next[j]=next[k];
35         }
36         else k=next[k];
37     }
38 }
39 int kmp()
40 {
41     int i=0,j=0;
42     while(i<len1&&j<len2)
43     {
44         if(j==-1||s[i]==t[j])
45         {
46             i++;
47             j++;
48         }
49          else j=next[j];
50     }
51     if(j>=len2)
52         return 1;
53         return 0;
54 }

 

posted @ 2012-09-28 18:36  尔滨之夏  阅读(395)  评论(0编辑  收藏  举报