Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> telnet 
V
    Опции темы
Bulat
Дата 24.12.2013, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Код

#!/usr/bin/perl

use strict;
use Net::Telnet;

my $host = ******;

my $t = new Net::Telnet (
  Host => $host, 
  Timeout => 25, 
  dump_log => "/var/log/restart_dump.log",
  input_log => "/var/log/restart.log",
  output_log => "/var/log/restart_output.log"
);

$t -> waitfor('/Key in your selection/');
$t -> cmd("s");

$t -> waitfor('/Key in your selection/');
$t -> cmd("y");


скрипт умирает со словами 
command timed-out at restart.pl line 17

restart.log :
Код

-----------------------------------------------------------------------------
Model name       : NPort 5150
MAC address      : 00:90:E8:23:DC:85
Serial No.       : 9435
Firmware version : 3.3 Build 08061714
System uptime    : 0 days, 16h:02m:49s
-----------------------------------------------------------------------------
<< Main menu >>
  (1) Basic settings
  (2) Network settings
  (3) Serial settings
  (4) Operating settings
  (5) Accessible IP settings
  (6) Auto warning settings
  (7) Monitor
  (8) Ping
  (9) Change password
  (a) Load factory default
  (v) View settings
  (s) Save/Restart
  (q) Quit

Key in your selection: s

-----------------------------------------------------------------------------
Ready to restart
  (y) Yes
  (n) No

Key in your selection: 


косяк в промпте или в чем-то другом??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Сумасшедший
Дата 24.12.2013, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

Репутация: нет
Всего: 107



В waitfor вроде как должна регулярка быть красивая. Т.е. наподобии
^Key in your selection(.*)$


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
Bulat
Дата 24.12.2013, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(Сумасшедший @  24.12.2013,  08:58 Найти цитируемый пост)
^Key in your selection(.*)$ 

 smile так тож не хочет.

Но вообще мне удалось нахачить рабочий вариант
Код

#!/usr/bin/perl

use strict;
use Net::Telnet;

my $host = *******;

my $t = new Net::Telnet (
  Host => $host, 
  Timeout => 10,
  Prompt => "/Key in your selection/is",
  dump_log => "/var/log/restart_dump.log",
  input_log => "/var/log/restart.log",
  output_log => "/var/log/restart_output.log"
);

sleep(1);
$t -> cmd("s");

$t -> waitfor('/Key in your selection/is');
$t -> cmd("y");


правда в инпут логах ничего не изменилось, а вот в дампе видны. Моха рестартует.


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tzirechnoy
Дата 29.12.2013, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Да, в промпте. Вы не выставили промпт, собственно (а по умолчанию там вещи под unix shell, и совсем не то, что Вам нужно).
PM MAIL   Вверх
Bulat
Дата 8.1.2014, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(tzirechnoy @  29.12.2013,  16:43 Найти цитируемый пост)
а по умолчанию там вещи под unix shell, и совсем не то, что Вам нужно

ну раз вы знаете то, что мне нужно, может и код подскажете, тем более скрипт не более чем в пару десятков строк!  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tzirechnoy
Дата 8.1.2014, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



ну, что-то в стиле 
Код

$t->prompt('/Key in your selection:/');
$t->waitfor($t->prompt());
$t->cmd('s');
$t->cmd('y');


после new Net::Telnet.
Последнее, возможно, лучшэ заменить на $t->print('y'), поскольку после этого приглашэния на ввод ужэ не будет.
Или вообще не париться с промптами, а просто 
Код

$t->print('s');
$t->print('y');


Вообще, ты программист, ты и отлажывай.
PM MAIL   Вверх
Сумасшедший
Дата 8.1.2014, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

Репутация: нет
Всего: 107



Приглашение telnetd:
Код

telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Ubuntu 12.04.3 LTS
lapa login: 

Код
Код
$t->waitfor('/^lapa login: $/');

Будет ждать бесконечно, т.к. от промпта описана только одна строка
А вот
Код
$t->waitfor("/^Ubuntu 12.04.3 LTS\nlapa login: /");

будет работать, т.к. промпт описан полностью.
В целом и междусисечный логин тоже будет работать.
Код
$t->waitfor('/(.*)lapa login:(.*)/');

Надеюсь, намёк понятен:)



--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
tzirechnoy
Дата 8.1.2014, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
Код
$t->waitfor('/^lapa login: $/');

Будет ждать бесконечно, т.к. от промпта описана только одна строка


Этот код будет работать бесконечно, т.к. правильный код -- 
Код
$t->waitfor('/^lapa login: $/m');

За разъяснениями -- man perlre.
PM MAIL   Вверх
alezzz
Дата 8.1.2014, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: нет
Всего: 14



с промптом можно и попроще, неважно сколько строк перед логином
Код

#!/usr/local/bin/perl

use Net::Telnet;

my $t = new Net::Telnet;

$t->open('***');
my ($pm, $m) = $t->waitfor('/ogin:\s*/');

print "$pm\n-----\n$m\n";


Код

                        DES-1210-28 Fast Ethernet Switch
                            Command Line Interface

                           Firmware: Build 5.10.B040
             Copyright(C) 2010 D-Link Corporation. All rights reserved.
DES-1210-28 l
-----
ogin:

главное не перестараться, а то сделал как-то '/#|>|:/' и конечно нашлось в дескрипшене свича ':'.

а код в первом посте не заработал скорее всего именно из-за промпта, из Net::Telnet:
Код

cmd - issue command and retrieve output
...
This method sends the command $string, and reads the characters sent back by the command up until and including the matching prompt.


Это сообщение отредактировал(а) alezzz - 8.1.2014, 22:59
PM MAIL   Вверх
Bulat
Дата 9.1.2014, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



tzirechnoy, ты прав! Вариант с 

Код

$t->prompt('/Key in your selection:/');
$t->waitfor($t->prompt());


работает как часы!

Сумасшедший, спасибо за отклик, но в данном случае проблема все же была с объявлением самого промпта методами модуля, нежели с сотавлением регулярного выражения.

Код

#!/usr/bin/perl

use strict;
use Net::Telnet;

my $host = ********;

my $DumpLog = "./restart_dump.log";
my $InputLog = "./restart_input.log";
my $OutputLog = "./restart_output.log";

my $t = new Net::Telnet (
  Host => $host, 
  Timeout => 10,
  dump_log => $DumpLog,
  input_log => $InputLog,
  output_log => $OutputLog
);

$t->prompt('/Key in your selection:/');
$t->waitfor($t->prompt());

$t->cmd('s');
$t->cmd('y');


мне кажется идеальный вариант, по крайней мере у меня работает без лишних хаков!


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
msAvtor
Дата 19.6.2014, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.6.2014

Репутация: нет
Всего: нет



с промптом можно и попроще, неважно сколько строк перед логином
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1379 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.