【问题标题】:File::Tail::Select what is the @pending behaviourFile::Tail::Select 什么是@pending 行为
【发布时间】:2011-03-31 05:02:58
【问题描述】:
foreach my $subfile(glob "*:*")

    {
            print "opening $subfile\n";
            push(@files,File::Tail->new(name=>"$subfile",debug=>$debug));
    }
    while (1)
    {
            ($nfound,$timeleft,@pending)= File::Tail::select(undef,undef,undef,$timeout,@files);
            unless ($nfound)
            {
               # timeout - do something else here, if you need to
            }
            else
            {
                    foreach (@pending)
                    {
                            print $_->{"input"}." (".localtime(time).") ".$_-> read;
                    }
            }
    }

@pending 行为是什么?如果结果显示如下...

TCP:34628-80(2011 年 3 月 30 日星期三 01:49:57)03/30-01:49:50.607858 119.40.116.196:80 -> 192.168.242.133:34628 TCP:34628-80(2011 年 3 月 30 日星期三 01:49:57) TCP TTL:128 TOS:0x0 ID:34869 IpLen:20 DgmLen:40 TCP:34629-80(2011 年 3 月 30 日星期三 01:49:57)03/30-01:49:51.309716 119.40.116.196:80 -> 192.168.242.133:34629 UDP:41415-53(2011 年 3 月 30 日星期三 01:49:57)03/30-01:49:47.220999 192.168.242.2:53 -> 192.168.242.133:41415 UDP:44705-53(2011 年 3 月 30 日星期三 01:49:57)03/30-01:49:47.427011 192.168.242.2:53 -> 192.168.242.133:44705 UDP:50539-53(2011 年 3 月 30 日星期三 01:49:57)03/30-01:49:47.213455 192.168.242.2:53 -> 192.168.242.133:50539 TCP:34628-80(2011 年 3 月 30 日星期三 01:49:57)***AP**F Seq:0x2F3E700A Ack:0x2359814F Win:0xFAF0 TcpLen:20 TCP:34629-80(2011 年 3 月 30 日星期三 01:49:57) TCP TTL:128 TOS:0x0 ID:34871 IpLen:20 DgmLen:40 UDP:41415-53(2011 年 3 月 30 日星期三 01:49:57)UDP TTL:128 TOS:0x0 ID:34859 IpLen:20 DgmLen:65 UDP:44705-53(2011 年 3 月 30 日星期三 01:49:57) UDP TTL:128 TOS:0x0 ID:34861 IpLen:20 DgmLen:153 UDP:50539-53(2011 年 3 月 30 日星期三 01:49:57)UDP TTL:128 TOS:0x0 ID:34857 IpLen:20 DgmLen:179 TCP:34628-80(2011 年 3 月 30 日星期三 01:49:57)=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ TCP:34629-80(2011 年 3 月 30 日星期三 01:49:57)***AP**F Seq:0x9D70418 Ack:0x248089DB Win:0xFAF0 TcpLen:20 UDP:41415-53(2011 年 3 月 30 日星期三 01:49:57) 长度:37 UDP:44705-53(2011 年 3 月 30 日星期三 01:49:57) 长度:125 UDP:50539-53(2011 年 3 月 30 日星期三 01:49:57) 长度:151 TCP:34628-80(2011 年 3 月 30 日星期三 01:49:57) TCP:34629-80(2011 年 3 月 30 日星期三 01:49:57)=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

@pending 不是会逐行存储数据吗?如何修改代码以仅检索 IP 地址?在我看来,我认为我可以使用 split() 将行逐字拆分。 .所以任何人都可以给我一些例子

【问题讨论】:

    标签: perl filehandle


    【解决方案1】:

    正则表达式将是获取 IP 地址的最简单方法:

    if (/([.\d]+):\d -> ([.\d]+):\d/) {
         # ipaddress 1 will be in $1, and ip address 2 will be in $2
    }
    

    【讨论】:

      【解决方案2】:

      !/usr/local/bin/perl

      使用 File::Tail;

      chdir("/var/log/snort");

      foreach my $fol(glob "..*.*") {

          print "Opening $fol\n";
      
          chdir("/var/log/snort/$fol");
      
          foreach my $subfile(glob "*:*")
          {
      
                  print "opening $subfile\n";
      
                  push(@files,File::Tail->new(name=>"$subfile",debug=>$debug));
          }
      
          while (1)
          {
                  ($nfound,$timeleft,@pending)= File::Tail::select(undef,undef,undef,$timeout,@files);
                  unless ($nfound)
                  {
                          print "Nothing to print \n";
                  }
                  else
      

      foreach (@pending) { 如果 (/([.\d]+):\d -> ([.\d]+):\d/) {

                                          print $_->{"input"}." (".localtime(time).") ".$2 -> read;
                                                                        }
                          }
                  }
          }
      

      } 嘿,伙计,我是这样锻炼的……这不正确吗?似乎没有什么可以打印出来的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 2013-07-26
        • 2017-07-04
        • 2020-07-25
        • 1970-01-01
        相关资源
        最近更新 更多