Perl 文件::尾部::选择平均值?
这是伟大的工作,但有一部分我不明白:Perl 文件::尾部::选择平均值?,perl,filehandle,Perl,Filehandle,这是伟大的工作,但有一部分我不明白: print $_->{"input"}." (".localtime(time).") ".$_-> read; 它打印什么?如果我将其修改为: print "$_"; 有一些错误。为什么? #!/usr/local/bin/perl use File::Tail; chdir( "/var/log/snort"); foreach my $fol(glob "*.*.*.*") { print "Opening $fol\
print $_->{"input"}." (".localtime(time).") ".$_-> read;
它打印什么?如果我将其修改为:
print "$_";
有一些错误。为什么?
#!/usr/local/bin/perl
use 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)
{
# timeout - do something else here, if you need to
}
else
{
foreach (@pending)
{
print $_->{"input"}." (".localtime(time).") ".$_-> read;
}
}
}
}
示例结果:
TCP:34628-80 (Wed Mar 30 01:49:57 2011) 03/30-01:49:50.607858 119.40.116.196:80 -> 192.168.242.133:34628
TCP:34628-80 (Wed Mar 30 01:49:57 2011) TCP TTL:128 TOS:0x0 ID:34869 IpLen:20 DgmLen:40
TCP:34629-80 (Wed Mar 30 01:49:57 2011) 03/30-01:49:51.309716 119.40.116.196:80 -> 192.168.242.133:34629
UDP:41415-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.220999 192.168.242.2:53 -> 192.168.242.133:41415
UDP:44705-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.427011 192.168.242.2:53 -> 192.168.242.133:44705
UDP:50539-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.213455 192.168.242.2:53 -> 192.168.242.133:50539
TCP:34628-80 (Wed Mar 30 01:49:57 2011) ***AP**F Seq: 0x2F3E700A Ack: 0x2359814F Win: 0xFAF0 TcpLen: 20
TCP:34629-80 (Wed Mar 30 01:49:57 2011) TCP TTL:128 TOS:0x0 ID:34871 IpLen:20 DgmLen:40
UDP:41415-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34859 IpLen:20 DgmLen:65
UDP:44705-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34861 IpLen:20 DgmLen:153
UDP:50539-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34857 IpLen:20 DgmLen:179
TCP:34628-80 (Wed Mar 30 01:49:57 2011) =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
TCP:34629-80 (Wed Mar 30 01:49:57 2011) ***AP**F Seq: 0x9D70418 Ack: 0x248089DB Win: 0xFAF0 TcpLen: 20
UDP:41415-53 (Wed Mar 30 01:49:57 2011) Len: 37
UDP:44705-53 (Wed Mar 30 01:49:57 2011) Len: 125
UDP:50539-53 (Wed Mar 30 01:49:57 2011) Len: 151
TCP:34628-80 (Wed Mar 30 01:49:57 2011)
TCP:34629-80 (Wed Mar 30 01:49:57 2011) =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
File::Tail::select
返回找到的文件句柄数、某种超时方式以及File::Tail
对象列表。这些在代码中的@pending
中。当您要打印内容时,您在@pending
中循环遍历每个成员,而不显式地创建新变量,因此@pending
的每个元素都会自动放入特殊的$\ucode>变量中
首先打印$\u->{“input”}
,这是某种“输入”(文档不清楚这是什么)、时区中的当前时间以及从文件中读取的字符串($\u>>读取
)
如果您只是尝试打印出$\uuuu
您正在尝试打印出一个对象,这不会给您预期的结果(除非所述对象重载字符串化,而File::Tail
不会)
我建议通读这本书
Edit:我浏览了一遍,发现$\u->{“input”}
严重滥用了面向对象的Perl。这实际上是对象创建者的name
参数的对象内部表示形式。您应该通过将$\>{“input”}
更改为$\->name
来正确访问它。我注意到,您的代码是这样编写的,这不是您的错,因为File::Tail
文档使用的正是这种语法,但它不正确,应该更改。哦,谢谢,如果我只想检索目标IP地址,该如何修改它呢?@T\y:您必须问另一个问题。这不是一个很容易在评论中回答的问题。