#!/usr/bin/perl $i=0; while(<>){ #读取数据后去掉换行符 chomp; #把获得的一行数据进行切割 @log_grep=split(/"/,$_); #把切割后的数据交给后面的子程序进行处理 &grep_log_main(@log_grep); #输出处理后的结果 print "源访问ip地址:$ip_home 访问日期:$yym 访问时间:$xiaoshi:$fenzhong:$miao 访问动作:$options 访问目录:$pwd 响应头:$head 浏览器源:$liulanqi \n"; } ####################### 处理日志主模块(包含多个子程序) ################ sub grep_log_main{ #获得从IP/时间片段 $ip=shift @log_grep; #交给ip/时间处理模块 &grep_ip_setIp($ip); #获得访问动作片段 $point=shift @log_grep; #交给访问动作处理模块 &grep_point_setPoint($point); #获得响应头片段 $offer=shift @log_grep; #交给响应头处理模块 &grep_offer_setOffer($offer); shift @log_grep; shift @log_grep; #获得客户端的访问类型 $liulanqi=shift @log_grep; } ######################### 处理来源IP ################################## sub grep_ip_setIp{ #对第一段进行切割 @ip2=split(/-/,$ip); #获得来源IP $ip_home=shift @ip2; shift @ip2; #获得后面的时间块 $time_home=shift @ip2; #对日期块进行处理 &grep_source_time_setTime($time_home); } ######################### 处理日期块 ################################## sub grep_source_time_setTime{ #首先将整个接收来的字段进行切割,以":"为切割标准。 @home_date=split(/:/,$time_home); #获取来源日期 $yym=shift @home_date; #用正则把前面的"["去掉,为了美观 $yym=~s/\[//g; #获取小时的数字 $xiaoshi=shift @home_date; #获得分钟的数字 $fenzhong=shift @home_date; #获得秒的数字 #因为是用":"进行分割的,所以到这里已经结束了分割,后面将会带着一个 #尾巴,为了去掉尾巴,我还是使用分割的方法进行取值. $miao=shift @home_date; #\b是退格的意思在这使用这个来作切割,主要为了切出秒数,本来准备用正则, #无奈整了很久没整出来 @miao=split(/\b/,$miao); #最后获得值 $miao=shift @miao; } ###################### 访问动作处理模块 ############################### sub grep_point_setPoint{ #对动作片段进行切割 @option=split(/\b/,$point); #获得访问动作的值 $options=shift @option; #获得访问目录/地址URL $pwd=shift @option; #通过子程序检查是否是攻击事件 &get_pwd_check($pwd); #获得访问协议 $xyi=shift @option; } ###################### 响应头处理模块 ################################ sub grep_offer_setOffer{ #切割片段 @offer=split(/\b/,$offer); shift @offer; #获得响应头 $head=shift @offer; }