Автор Тема: system в Unix\'ах  (Прочитано 5918 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« : 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 - макадрес и нечего более.

Заранее благодарен.
« Последнее редактирование: 11 Декабря 2005, 22:47:59 от Super »

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #1 : 12 Декабря 2005, 12:12:26 »
http://search.cpan.org/~crazydj/Net-ARP-0.6/ARP.pm
Может это лучше чем system?
Всё будет хорошо - я договорился!

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #2 : 12 Декабря 2005, 12:15:56 »
Да, если уж совсем не втерпеж использовать системный вызов  - поэкспериментируйте с обратными кавычками

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

P.S.: \\n Зачем в system использовать?
Всё будет хорошо - я договорился!

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #3 : 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";

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #4 : 13 Декабря 2005, 13:04:38 »
А теперь ещё вопросик.
Не могли бы дать пример работы Perl\'a с Postgresql\'ем.
Неткажусь даже и от ссылки.

Заранее благодарен.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
system в Unix\'ах
« Ответ #5 : 13 Декабря 2005, 13:23:34 »
1. arp -a | awk \'$2 ~ /\\(10\\.0\\.0\\.([1-9]|10)\\)/ { print $4; }\'
2. perldoc DBI; perldoc DBD::Pg

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #6 : 13 Декабря 2005, 13:51:08 »
arto Огромное спасибо но Я остановлюсь пока что на своём варианте.  :)  (так как есть у нас люди туго шарящие в нем и лишнее их нажатие не туда гразит катастрофе :) ) а мне лично твой вариант  больше понравился. (может где нибудь применю)

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

из этого всего есть 1-й и 2-й пункт. вот потихоньку делаем.
и требуется гибкость и понятность скрипта.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
system в Unix\'ах
« Ответ #7 : 13 Декабря 2005, 13:55:08 »
бродкаст пинг никак?

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #8 : 13 Декабря 2005, 13:59:32 »
Есть 2-а отдельных скрипта с бродкастом есть и по каждой машине.
вот счас тестирую какой лучше спровляется и бостоверную инфу даёт и нечего ли Я не теряю если есть бродкаст.

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #9 : 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"

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
system в Unix\'ах
« Ответ #10 : 15 Декабря 2005, 11:34:44 »
perldoc -f open

Оффлайн Super

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #11 : 15 Декабря 2005, 21:35:57 »
Если кому интиресно могу выложить скрипт.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
system в Unix\'ах
« Ответ #12 : 16 Декабря 2005, 17:36:38 »
Super
выкладывайте. :)
пока-пока. :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28