-2

誰でもこのコードについて意見をいただけますか?

#!/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()メソッドではありませんか?

2番目の質問は$file = File::Tail -> new(<Filename>); <Filename>、単一のファイルである必要があり、特定のファイル名を指す必要があるように見えることです... 3つのファイルsnort.log.1301090101snort.log.1301090102ありsnort.log.1301090102、同じディレクトリにある場合、単一のFile::Tail関数を使用してそのすべてまたは内部のファイルを読み取ることはできませんディレクトリ?

4

1 に答える 1

1

最初の質問で説明したように、これらのファイルを直接読み取ることはできません。それらは、テキストではなく、バイナリ形式です。は使用できませんFile::Tail

示されているように、これらのログを読み取る実際のsnortプロセスの出力をperlにパイプすることができます。「テール」タイプのオプションが提供されていない場合、それらをテールすることはできません。

古いperlモジュールNet::TcpDumpLogがあり、それでも機能する場合はデータを直接読み取ることができますが、ログを追跡することもできません。

それらを調整する唯一の方法は、ASCIIログを出力するようにsnort構成を変更することですが、パケットストリームに追いつくことができないという問題が発生する可能性があります。

于 2011-03-26T01:24:20.753 に答える