lexx
написал 7 апреля 2008 года в 12:27 (925 просмотров)
Ведет себя
как мужчина; открыл 41 тему в форуме, оставил 143 комментария на сайте.
На самом деле скорее всего присутсвует неверное в корне понимание операторов Perl.
Нужно для начала разобраться в следующих веах:
1. В какой переменной хранится обрабатываемая строка
2. как работает оператор =~
3. как работает оператор m//
Example:
Обрабатываемая строка в переменной $line
if ($line =~ m/(\d+\.\d+\.\d+\.\d+).(\d+)/) {
$ipAddress = $1;
$port = $2;
print «$ipAddress:$port»;
} else {
print «Wrong line format, sorry :(»;
}
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Спасибо, за предложение, но я кажется справился вот так:
s/^.*fxp0: //;
s/ >//;
s/ .*//;
if ( m/(\d+\.\d+\.\d+\.\d+)/ != NULL ) { $ip =~ m/(\d+\.\d+\.\d+\.\d+)/; $ip = $1; } else { die «error read $!»; «exit(0)»; }
s/\d+\.\d+\.\d+\.\d+//;
if (s/\.// == «») { $port = «ECHO\n»; }
else { $port = $_;}
printf «$ip\t$port»;
Ты босс :)
Но проблема в твоем коде — его непонятность …
Так же просто пытаешься замочить муху из базуки …
Можеть быть и так, не спорью, но как любой новичок, для меня пока важен результат, чтоб двигатся дальше и не терят время, а так работает и ето меня радует! Буду профи, буду усовершенствовать своего source.
Как-то так покрасивше будет?
Разбираешь вывод tcpdump’а ?
Если не нужны флаги и внутренности пакетов, можно сразу делать
разбирать будет ещё проще.
Правда, это под линукс. Фряхиного tcpdump’а под рукой нет, там по фряшной традиции могут быть другие опции и другой формат вывода. ;)
tcpdump один на всех.
Да, tcpdump разбираю,:) и по поводу етого стандартный перебор елементов в массиве, помогите найти ошибку — с логикой как бы все нормально, только синтаксис меня мучает всегда.: масив из 6 елементов, нужно так отсортировать чтоб небыло повторяющиеся елементов, и счетчик для вычисления количество попыток с одного и того-же IP , чтобы после перебора можно было отсортировать самые активные взломщики :) в начале списка, с количество попытки с их стороны.Код:
…
$v = 6; # всего записы в логах
@fin=();
for ($i=0;$i<$v;$i++) {
for ($j=1;$j=$v;$j++) {
$sum =0;
$a = @arr[$i];
$b = @arr[$j];
if ($a eq $b) { $sum++; } else { $b = $a; @fin = print(«$sum\t$b») }
}
}
print @fin;
Ничего не понял..
Тебе надо сделать что-то аналогичное этому:
?
Спасибо,Curu3MyHg, да что-то такое, я как бы почти справился..только меня волнует следующий код, он рабочий только понят не могу почему последнее значение из файла не перебирается т.е как, могу, знаю где надо поправить, но когда поправляю код зцикливает с ошибкой «Use of uninitialized value in numeric lt (<)…»
Сам код:
————————————-
…
$v=6
for ($i=0;$i<$v;$i++) {
for ($j=1;$j<$v;$j++) { # вот тут надо поправить на '=' только фиг…
if (@arr[$i] < @arr[$j]) { # ошибка ссылается на ето место
quit; } else {
$b = @arr[$i];
@arr[$i] = @arr[$j];
@arr[$j] = $b;
}
}
}
print @arr,«\n»;
У тебя в массиве не иницилизированное значение, скорее всего tcpdump при определенных условиях не выводит все столбцы для записей, а ты это не замечаешь. Поставь обычный print перед сравнением и сможешь понять в каких случаях это возникает.
Спасибо всем за помощь. разобрался кажется и тепер все нормально. Беда была в Midnight Commander который поставлял мне невидимые знаки, который vi благополучно вычеслил! Тему можете закрывать!