Как я могу сканировать несколько файлов журналов, чтобы найти, какие из них имеют определенный IP-адрес? - PullRequest
1 голос
/ 12 января 2009

В последнее время на моем сервере было несколько злоумышленников, пробующих вредоносные программы, поэтому я решил несколько «отследить» их, хотя знаю, что они далеко не уйдут.

Теперь у меня есть весь каталог, содержащий журналы сервера, и мне нужен способ поиска по каждому файлу в каталоге и возвращения имени файла, если найдена строка. Поэтому я подумал про себя: что может быть лучше для языка и текстовых операций, чем Perl? Так что мой друг помогает мне с помощью скрипта сканировать все файлы на определенный IP и возвращать имена файлов, которые содержат IP, чтобы мне не приходилось искать злоумышленника в каждом журнале вручную. (У меня есть сотни)

#!/usr/bin/perl

$dir = ".";

opendir(DIR, "$dir");
@files = grep(/\.*$/,readdir(DIR));
closedir(DIR);

foreach $file(@files) {
    open FILE, "$file" or die "Unable to open files";

    while(<FILE>) {
        print if /12.211.23.200/;
    }

}

хотя это дает мне ошибки чтения каталога. Любая помощь с благодарностью.

РЕДАКТИРОВАТЬ: Код отредактирован, все еще говоря, что отказано в разрешении не может открыть каталог в строке 10. Я просто собираюсь запустить скрипт из каталога журналов, если вы спрашиваете об изменении каталога на «.»

Mike.

Ответы [ 14 ]

0 голосов
/ 12 января 2009

Я правильно понял? Ваша строка 10, которая дает вам ошибку

open FILE, "$file" or die "Unable to open files";

И файл $, который вы пытаетесь прочитать, в соответствии со строкой 6,

@files = grep(/\.*$/,readdir(DIR));

- это файл, который оканчивается нулем или более точкой . Это то, что вы действительно хотели? Это в основном соответствует каждому файлу в каталоге, включая "." а также "..". Может быть, у вас недостаточно прав для открытия родительского каталога для чтения?

РЕДАКТИРОВАТЬ: если вы хотите только прочитать все файлы (включая скрытые), вы можете использовать что-то вроде следующего:

opendir(DIR, ".");
@files = readdir(DIR);
closedir(DIR);

foreach $file (@files) {
  if ($file ne "." and $file ne "..") {
    open FILE, "$file" or die "cannot open $file\n";
    # do stuff with FILE
  }
}

Обратите внимание, что это не заботится о подкаталогах.

0 голосов
/ 12 января 2009

Вы просматривали CPAN для парсеров журнала? Я искал с 'log parse', и он дал более 200 просмотров. Некоторые (вероятно, многие) не будут актуальны - некоторые могут быть. Частично это зависит от того, какой веб-сервер вы используете.

0 голосов
/ 12 января 2009

Кроме того, если вы должны использовать readdir(), убедитесь, что вы сохраняете выражение следующим образом:

while (defined(my $filename = readdir(DH))) {
    ...
}

Если вы не выполните тест defined(), цикл прекратится, если он найдет файл с именем «0».

0 голосов
/ 12 января 2009

~ не расширяется автоматически в Perl.

opendir my $fh,  '~/' or die("Doin It Wrong");  # Doing It Wrong. 

opendir my $fh, glob('~/') and die( "Thats right!" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...