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;
    }
    
  • 相关阅读:
    WDF驱动中KMDF与UMDF区别
    GTD190018:【翻译】The Case Against Civilization
    GTD190017:【翻译】Transformer: A Novel Neural Network Architecture for Language Understanding
    GTD180016:【翻译】Software Engineering ≠ Computer Science
    GTD180015:【学习】一文看尽深度学习RNN:为啥就它适合语音识别、NLP与机器翻译?
    GTD180014:【翻译】Combinatory_logic
    GTD180013:【翻译】Improving the Realism of Synthetic Images
    GTD180012:【翻译】Visualizing Algorithms
    GTD180011:【翻译】The future of deep learning
    GitHub180001:【翻译】Using 3D Convolutional Neural Networks for Speaker Verification
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/2934323.html
Copyright © 2011-2022 走看看