Forum Webscript.Ru

Программирование => Perl => Тема начата: Super от 11 Декабря 2005, 22:16:56

Название: system в Unix\'ах
Отправлено: Super от 11 Декабря 2005, 22:16:56
Есть скрипт запускается ЛОКАЛЬНО.
это только часть с которой проблема.
for ($i = 1; $i < 25; ++$i)
{
$ip="192.168.1.$i";
system "/usr/sbin/arp -n $ip \\n";
}

$provereno = $i-1;
print "\\n Проверено $provereno IP адресов \\n";
________________________________________
что выводт
192.168.1.1 (192.168.1.1) -- no entry
? (192.168.1.2) at 00:00:20:00:09:63 on rl0 static
? (192.168.1.3) at 00:80:48:2c:08:36 on rl0
? (192.168.1.4) at 00:12:79:bb:0d:91 on rl0

Требуется записать в переменую допустим
$mac - макадрес и нечего более.

Заранее благодарен.
Название: system в Unix\'ах
Отправлено: Skif от 12 Декабря 2005, 12:12:26
http://search.cpan.org/~crazydj/Net-ARP-0.6/ARP.pm
Может это лучше чем system?
Название: system в Unix\'ах
Отправлено: Skif от 12 Декабря 2005, 12:15:56
Да, если уж совсем не втерпеж использовать системный вызов  - поэкспериментируйте с обратными кавычками

my $arp = `/usr/sbin/arp -n $ip `;
Вернет все содержимое arp

P.S.: \\n Зачем в system использовать?
Название: system в Unix\'ах
Отправлено: Super от 13 Декабря 2005, 12:58:06
Огромное спасибо Skif\'у за то что направил в нужное русло. И в результате полноценый скрипт.
#!/usr/bin/perl

for ($i = 1; $i < 10; ++$i)
{
$ip="10.0.0.$i";
my $arp = `/usr/sbin/arp -n $ip `;
if ($arp =~ /(\\w+:\\w+:\\w+:\\w+:\\w+:\\w+)/)
{
print "$1\\n";
}
}
$provereno = $i-1;
print "\\nПроверено $provereno IP адресов \\n";
Название: system в Unix\'ах
Отправлено: Super от 13 Декабря 2005, 13:04:38
А теперь ещё вопросик.
Не могли бы дать пример работы Perl\'a с Postgresql\'ем.
Неткажусь даже и от ссылки.

Заранее благодарен.
Название: system в Unix\'ах
Отправлено: arto от 13 Декабря 2005, 13:23:34
1. arp -a | awk \'$2 ~ /\\(10\\.0\\.0\\.([1-9]|10)\\)/ { print $4; }\'
2. perldoc DBI; perldoc DBD::Pg
Название: system в Unix\'ах
Отправлено: Super от 13 Декабря 2005, 13:51:08
arto Огромное спасибо но Я остановлюсь пока что на своём варианте.  :)  (так как есть у нас люди туго шарящие в нем и лишнее их нажатие не туда гразит катастрофе :) ) а мне лично твой вариант  больше понравился. (может где нибудь применю)

Суть скрипта:
1. пинговать сеть (пинг по одному разу) на каждый IP адрес
2. Запуск arp и перенос от туда MAC адрес в базу Postgresql
3. Сравнение MAC и IP в базе с MAC\'ом и IP явным если не сошлось то записать его в базу как не извесного.
4. Сгенерировать случайным образом MAC и вставить его в arp таблицу.

из этого всего есть 1-й и 2-й пункт. вот потихоньку делаем.
и требуется гибкость и понятность скрипта.
Название: system в Unix\'ах
Отправлено: arto от 13 Декабря 2005, 13:55:08
бродкаст пинг никак?
Название: system в Unix\'ах
Отправлено: Super от 13 Декабря 2005, 13:59:32
Есть 2-а отдельных скрипта с бродкастом есть и по каждой машине.
вот счас тестирую какой лучше спровляется и бостоверную инфу даёт и нечего ли Я не теряю если есть бродкаст.
Название: system в Unix\'ах
Отправлено: Super от 15 Декабря 2005, 11:28:58
подскажите как в Perl\'eь можно выполнит эту команду
(DBD::Pg) - нету

sh -c "echo \\"INSERT INTO ip_mac (time ,ip ,mac) VALUES (\'now\', $ip, $1);\\" | psql CETb _postgresql"
Название: system в Unix\'ах
Отправлено: arto от 15 Декабря 2005, 11:34:44
perldoc -f open
Название: system в Unix\'ах
Отправлено: Super от 15 Декабря 2005, 21:35:57
Если кому интиресно могу выложить скрипт.
Название: system в Unix\'ах
Отправлено: AnnA от 16 Декабря 2005, 17:36:38
Super
выкладывайте. :)