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 }
|