任何人都可以就此代码给我一些意见吗?
#!/usr/local/bin/perl
use File::Tail;
$file = File::Tail -> new("/var/log/snort/snort.log.1301090101");
while(defined($line=$file ->read))
{
print $line;
}
因为日志文件是二进制格式所以我尝试修改这样的代码
#!/usr/local/bin/perl
use File::Tail;
$file = File::Tail -> new("/var/log/snort/snort.log.1301090101");
open(my $LF, "-|", "/usr/local/bin/snort -r $file") or die "$!";
while(defined($line=$file ->read))
{
print $line;
}
这段代码似乎有一些语法错误..不可能结合管道和文件尾部功能? file::tail
函数是否已包含open()
方法?
第二个问题是关于$file = File::Tail -> new(<Filename>);
<Filename>
似乎必须是单个文件,并且必须指向特定的文件名...
如果我在同一目录中有3个文件:snort.log.1301090101
,snort.log.1301090102
和snort.log.1301090102
,则无法使用单个File::Tail
函数读取所有内容或文件内的文件?目录
答案 0 :(得分:1)
正如您在第一个问题中所解释的那样:您不能直接阅读这些文件。它们是二进制格式,而不是文本格式。您无法使用File::Tail
。
如图所示,您可以将读取这些日志的实际snort进程的输出传递给perl。如果它不提供“尾部”类型选项,则不能拖尾它们。
有一个旧的perl模块Net::TcpDumpLog可以让你直接读取数据,如果它仍然可以工作,但它也不能拖尾日志。
将它们拖尾的唯一方法是将snort配置更改为输出ASCII日志,但是您可能遇到问题,因为它能够跟上数据包流。