zoukankan      html  css  js  c++  java
  • Perl单线程日志分析工具

    #!/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;
    }
    
  • 相关阅读:
    网络相关知识点:nginx相关概念
    Nginx初体验(一):nginx介绍
    Mybatis常见面试题(转)
    Mybatis 的常见面试题
    springmvc和mybatis面试题(含答案)
    SpringMVC总结以及在面试中的一些问题.
    Spring69道面试题
    Spring面试题
    java基础面试题
    2018年Java面试题整理
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/2934323.html
Copyright © 2011-2022 走看看