0

Snortログ ファイルを読み取る Perl プログラムを作成しています。VMware を使用して Fedora 14 を実行しています。

コマンド/usr/loca/bin/snort -r /var/log/snort/snort.log.1299686068を使用すると、結果が得られます。

03/08-21:16:03.609258 172.16.115.87:4159 -> 205.181.112.67:80
TCP TTL:63 TOS:0x0 ID:3588 IpLen:20 DgmLen:385 DF
***AP*** Seq: 0xEB6DE4B0  Ack: 0xD00D0DA6  Win: 0x7D78  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

03/08-21:16:03.627973 205.181.112.67:80 -> 172.16.115.87:4159
TCP TTL:64 TOS:0x0 ID:2458 IpLen:20 DgmLen:40 DF
***A**** Seq: 0xD00D0DA6  Ack: 0xEB6DE609  Win: 0x7E87  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

03/08-21:16:03.651503 205.181.112.67:80 -> 172.16.115.87:4159
TCP TTL:64 TOS:0x0 ID:2459 IpLen:20 DgmLen:978 DF
***AP*** Seq: 0xD00D0DA6  Ack: 0xEB6DE609  Win: 0x7FE0  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+^C

*** Caught Int-Signal
03/08-21:16:03.654590 205.181.112.67:80 -> 172.16.115.87:4159
TCP TTL:64 TOS:0x0 ID:2460 IpLen:20 DgmLen:40
***A***F Seq: 0xD00D1150  Ack: 0xEB6DE609  Win: 0x7FE0  TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

送信先と送信元の IP アドレスなどの情報が一覧表示されますが、Perl を使用してそれらを読み取るプログラムを作成すると、一覧に表示されるのは不明なシンボルです。

ログ ファイルが Snort によって保護されていませんか、それとも他に何が問題なのですか? 最初の例と同じ結果を正確に 100% 表示しているわけではありませんが、少なくともすべてを明確にリストしています。

私のコードは次のとおりです。

#!/usr/local/bin/perl
use File::Tail;
opendir L_FOL, "/var/log/snort" || die "Could not open LOGFOLDER direcotry\n $!";
my @allrule = grep {/^snort.log./} readdir L_FOL;
close L_FOL;
foreach my $rulefile (@allrule) {
    open(LF, "/var/log/snort/$rulefile") or die "$!";
    while (<LF>) {
        print "$_\n";
    }
    close(LF);
}
4

1 に答える 1

3

Snort ログ ファイルはバイナリ (tcpdump) 形式です。それらをテキストとして読むことはできません。

それを行いたい場合は、snort に-K asciiオプションで ASCII として書き込むように指示する必要があります。

問題は、snort が追いつくことができないという問題を引き起こす可能性があることです。より良いオプションは、単に snort の出力を perl プログラムにパイプして、それを読むことです:

open(LF, "/usr/local/bin/snort -r /var/log/snort/$rulefile|") or die "$!";

これは非常に古い perl 構文であり、もはや使用すべきではないことに注意してください。裸の単語を避け、3 つの引数を使用する必要があります。open()

open(my $lf, "-|", "/usr/local/bin/snort -r /var/log/snort/$rulefile") or die "$!";
while (<$lf>) {
...
}
于 2011-03-25T02:10:53.143 に答える