![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| worsvch |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 23.4.2009 Репутация: нет Всего: нет |
Perl стал изучать неделю назад, так что не могу понять в чем проблема, где ошибка. Perl установлен в WindowsXP
Нужно вывести имена всех ПК в файл #!/perl use Socket; open(PKNAME,'> pknames') or die ("Can't create file"); for ($x = 2;$x <= 253;$x++) { @addr = gethostbyaddr((inet_aton("192.168.1.".$x)),AF_INET); print PKNAME "Name of 192.168.1.".$x." is ".@addr[$x]."\n"; } close(PKNAME); Вывод получается такой: "Name of 192.168.1.2 is " "Name of 192.168.1.3 is " А должен быть примерно такой: "Name of 192.168.1.2 is ИМЯ_КОМПЬЮТЕРА" "Name of 192.168.1.3 is ИМЯ_КОМПЬЮТЕРА" и так далее. Пробовал сделать без цикла с одним ПК, там получилось. А вот на целую сеть не получается. :wall: К тому же скрипт достаточно долго обрабатывает все адреса, нельзя как то ускорить его работу? |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
worsvch, можно попробовать
for ($x = 2;$x <= 253;$x++) { my $addr = gethostbyaddr((inet_aton("192.168.1.".$x)),AF_INET); print PKNAME "Name of 192.168.1.$x is $addr\n"; } Это сообщение отредактировал(а) ginnie - 23.4.2009, 17:28 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Название компа храниться в $addr[0] Это ваша ошибка.
используйте Data::Dumper или отладчики которые позволяют просматривать содержимое переменных А быстрее скорее всего никак, тут все упирается в скорость ответа вашего dns сервера. При этом дольше всего ожидать ответ если компа нет в сети(на моей машине ответ о существующих 0.7 c ответ об отсутсвующих 14.7c) К сожалению под Windows нельзя поставить timeout для Socket. по крайней мере я не нашел..... можно попробовать: распараллелить использовать Net::DNS правда у меня он отказался работать по нормальному.Но это проблемы моего DNS. Это сообщение отредактировал(а) shamber - 24.4.2009, 14:21 |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Попробуйте такой код
Это сообщение отредактировал(а) shamber - 25.4.2009, 01:59 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -MSocket -le 'foreach (@ARGV) { my $a = (gethostbyaddr (inet_aton ($_),AF_INET))[0] or next; print "$_: $a" }' 192.168.1.{1..255}
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
arto, человек же сказал, что у него винда. Зачем предлагать команду, которую он почти наверняка не сможет исполнить? (cmd не понимает одинарных кавычек и масок он понимает даже самых простых, а таких как 192.168.1.{1..255} -- тем более. А если предположить, что юзер настолько продвинут, что поставил себе нормальный шелл, то он, скорее всего, и на заданный им вопрос сам легко нашел бы ответ.)
|
|||
|
||||
| worsvch |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 23.4.2009 Репутация: нет Всего: нет |
Во-первых, то что я только начал изучать perl совсем не означает, что я простой юзер. Я всего лишь начал изучать perl. Да и зачем юзеру изучать языки программирования? Во вторых, если Вы намекали на то, что лучше это все было делать, к примеру, в линуксе, так это я и сам знаю, и даже знаю как выполнить эту команду в линуксовой консоли. Но на работе линукс ставить никто не разрешит, а так бы поставил. А в-третьих я уже и сам со скриптом разобрался. Я просто не знал, что имя машины записывается в @addr[0], а не в @addr[$x]. Да и pod, которые находятся в pm-файлах я уже научился пользоваться, так что по большей части пытаюсь сам разбираться Вот так вот |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
| worsvch |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 23.4.2009 Репутация: нет Всего: нет |
||||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc -f gethostbyaddr
perldoc Data::Dumper |
|||
|
||||
| worsvch |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 23.4.2009 Репутация: нет Всего: нет |
Arto, спасибо, я этого не знал. Посмотрел. Что-то типа man только для perl Добавлено через 1 минуту и 46 секунд Всем ответившим спасибо. С проблемой разобрался. Всё заработало |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Галочки не забывайте ставить если вопрос решен
|
|||
|
||||
| worsvch |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 23.4.2009 Репутация: нет Всего: нет |
Поставил галочку
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |