Perl Script: как функция File :: Tail способна читать двоичный (TCPDUMP) файл? - PullRequest
0 голосов
/ 26 марта 2011

Кто-нибудь может дать мне мнение об этом коде?

#!/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;
} 

кажется, что в этом коде есть какая-то синтаксическая ошибка ... не возможно объединить функцию pipe и file tail? не file::tail функция уже включает open() метод?

2-й вопрос о $file = File::Tail -> new(<Filename>); <Filename> кажется, должен один файл и должен указывать на конкретное имя файла ... если у меня 3 файла: snort.log.1301090101, snort.log.1301090102 и snort.log.1301090102 в одном каталоге, невозможно ли использовать одну функцию File::Tail для чтения всего этого или файла внутри каталога?

1 Ответ

1 голос
/ 26 марта 2011

Как объяснено в вашем первом вопросе: Вы не можете просто читать эти файлы напрямую .Они в двоичном формате, а не в текстовом формате.Вы не можете использовать File::Tail.

. Вы можете передать вывод фактического процесса snort, который читает эти журналы, в perl, как было показано.Если он не предлагает опцию типа «tail», вы не можете использовать их.

Существует старый модуль perl Net :: TcpDumpLog , который может позволить вам читать данные напрямуюесли он все еще работает, но он также не может привязывать журналы.

Единственный способ привязать их - это изменить конфигурацию snort для вывода журналов ASCII, но вы можете столкнуться с проблемами, которые могутс потоком пакетов.

...