Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
omar
Зарегистрирован: 22.01.2004 Сообщения: 99 Откуда: г.К-Чепецк
|
Добавлено: Пт Фев 25 2005 12:00 Заголовок сообщения: хэши в Перл |
|
|
помогите плиз!!!
Пост конечно не совсем туда .. но могет кто нить подскажет
есть хэш:
%userы = ("1.2.3.4" => "MAN",
"1.2.3.5" => "User1");
и есть прогу которая выбирает все IP из файлика и запихивает в переменную. Для проверки и подстановки пишу так:
while(($k,$v)=each(%users))
{
# print "$src это print $k"
if ( $src == $k )
{
print "$k is $src\n";
}
else
{
$src = $src;
}
}
где $src это IP
скажем если отдельно выводить через принт примерно так:
print "$src это print $k"
получим
1.2.3.4 это 1.2.3.4
а такая конструкция через IF не работает ... почему так? |
|
Вернуться к началу |
|
|
DmitriyS
Зарегистрирован: 19.06.2002 Сообщения: 381 Откуда: Е-бург
|
Добавлено: Пт Фев 25 2005 13:38 Заголовок сообщения: |
|
|
Ты лучше напиши что именно ты хочешь сделать... я так и не понял...
ты для каждого $src будешь весь %userы перебирать? |
|
Вернуться к началу |
|
|
omar
Зарегистрирован: 22.01.2004 Сообщения: 99 Откуда: г.К-Чепецк
|
Добавлено: Пт Фев 25 2005 15:03 Заголовок сообщения: хеши |
|
|
ОК. Вот проблема есть роутер с настроеннным файерволлом, который ведет лог примерно такой:
Фев 22 25.02.05 INPUT DROP: SRC=1.2.3.4 DST=10.10.10.10 SPT=22 DPT=22 PROTO=TCP ....
И есть скрипт на перле который разбирает все эти строки...
Есть список клиентов с конкретными IP и именами.
И надо сделать так чтобы вместо IP вставлялось имя а не IP
вот я и хотел сделать это через ассоциативный массив |
|
Вернуться к началу |
|
|
DmitriyS
Зарегистрирован: 19.06.2002 Сообщения: 381 Откуда: Е-бург
|
Добавлено: Пт Фев 25 2005 15:23 Заголовок сообщения: |
|
|
допустим $users{'192.168.0.2'}="User1" (и т.д.) т.е. имеем хеш.
открываем лог
open(LOG,"</path/to/log");
while($line=<LOG>)
{
$line=~/.*SRC=(\d+\.\d+\.\d+\.\d+)\sDST.*/; # или так /.*SRC=(\S+)\sDST.*/
$src_ip=$1;
$user_name=$users{$src_ip};
if ($user_name eq '') {$user_name="Незнакомец!"}
$line=s/$src_ip/$user_name/;
print "$line";
}
Вот вроде и всё. На счёт регулярного выражения - если у тебя такой лог как ты написал, то должно работать. Никаких ненужных переборов в циклах... Ну, можно сделать и элегантнее разумеется... |
|
Вернуться к началу |
|
|
omar
Зарегистрирован: 22.01.2004 Сообщения: 99 Откуда: г.К-Чепецк
|
Добавлено: Пт Фев 25 2005 16:36 Заголовок сообщения: спасибо... |
|
|
|
|
Вернуться к началу |
|
|
|