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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cmd в Net::Telnet 
:(
    Опции темы
Guran
Дата 4.10.2011, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Я недавно начал изучать перл и у меня возникла некоторая проблема, которую я сам решить оказался не в состоянии. Суть: существует свитч. Нужно к нему подключиться, дать команду и вывести ответ от команды в консоль. проблема возникает в этом куске:

Код

$match = "/d\n\n/";
@lines = $conn->cmd(String=>"sh sw", 
              Timeout => 4, 
              Prompt => $match);


Все работает, но последнюю букву последнего слова функция естественно "съедает". Да и скрипт должен быть универсальным, я не всегда буду знать чем заканчивается строка. Если написать просто

Код

@lines = $conn->cmd('sh sw');
print @lines;


то выдает command timed-out at test.pl line 23

На всякий случай выкладываю весь код

Код

#!/usr/bin/perl

use Net::Telnet;

$username = "";
$passwd = "";

$conn = new Net::Telnet(Timeout => 10,  
                 Dump_Log => 'DUMP.LOG',
                    Host => '10.240.225.249');
$conn -> open();

$conn -> waitfor( '/UserName:/' );
$conn -> print( $username );

$conn -> waitfor( '/PassWord:/' );
$conn -> print( $passwd );
$conn -> waitfor('/#/');

$match = "/d\n\n/";
@lines = $conn->cmd(String=>"sh sw", 
              Timeout => 4, 
              Prompt => $match); 

print @lines;

$conn -> print( "logout" );


Заранее спасибо.

Это сообщение отредактировал(а) Guran - 4.10.2011, 03:08
PM MAIL   Вверх
arto
Дата 4.10.2011, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



промпт у вас какой?
PM MAIL ICQ   Вверх
Guran
Дата 4.10.2011, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 4.10.2011,  08:01)
промпт у вас какой?

Код

$match = "/d\n\n/";
@lines = $conn->cmd(String=>"sh sw", 
              Timeout => 4, 
              Prompt => $match); 


Не то?
PM MAIL   Вверх
alezzz
Дата 4.10.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Какой промпт на свиче? есть подозрение что неправильное рег. выражение в $match. И какой свитч, cisco?

Это сообщение отредактировал(а) alezzz - 4.10.2011, 13:11
PM MAIL   Вверх
arto
Дата 4.10.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



промпт -- строка приглашения, которую выдает устройство или программа.
d\n\n мне кажется очень странным.

когда вы заходите на свое устройство, что он вам показывает?
PM MAIL ICQ   Вверх
Guran
Дата 4.10.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Свитч д-линковский

под рукой его нет но суть: 
Команда: sh sw

Пареметр       : значение
Пареметр       : значение
Пареметр       : значение
Пареметр       : значение
Пареметр       :Enabled
пустая строка
Приглашение писать команды дальше.

Собственно последняя буква в слове Enabled и два переноса строки послужили промптом, потому что зацепиться больше не за что

PM MAIL   Вверх
alezzz
Дата 4.10.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Когда появится под рукой свитч то покажите его промпт, можно сниффером. Обычно промпт заранее извесен чтобы понять что система закончила выполнение команды. Я использовал Net::Telnet на разных устройствах, вот один из вариантов как получал ответ:

Код

...
$host->waitfor('/login: $/');
$host->print($username);
$host->waitfor('/Password:$/');
$host->print($password);
...
($out, $prompt) = $host->waitfor('/.+> $/');
...
$host->print("$command");
$out = $host->waitfor("/$prompt/");
...


Это сообщение отредактировал(а) alezzz - 4.10.2011, 20:49
PM MAIL   Вверх
arto
Дата 4.10.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



можно попробовать посмотреть в сторону Net::Appliance::Session
PM MAIL ICQ   Вверх
Guran
Дата 4.10.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(alezzz @ 4.10.2011,  16:06)
Когда появится под рукой свитч то покажите его промпт, можно сниффером. Обычно промпт заранее извесен чтобы понять что система закончила выполнение команды. Я использовал Net::Telnet на разных устройствах, вот один из вариантов как получал ответ:

У меня в том-то и проблема, что промптом можно сделать только последнюю строку вывода, но в этом случает она "съедается". А без промпта почему-то выдается таймаут.
PM MAIL   Вверх
alezzz
Дата 4.10.2011, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Цитата(Guran @  4.10.2011,  14:07 Найти цитируемый пост)
под рукой его нет но суть:
 Команда: sh sw
Пареметр       : значение
Пареметр       : значение
Пареметр       : значение
Пареметр       : значение
Пареметр       :Enabled
пустая строка
Приглашение писать команды дальше.

Интересует "Приглашение писать команды дальше.", если оно не меняется то это и есть ваш промпт. Похоже что вы сейчас определяете конец ответа свича по последней букве в Enabled и двум переносам строки, это действительно не универсально.

Это сообщение отредактировал(а) alezzz - 4.10.2011, 17:52
PM MAIL   Вверх
Guran
Дата 5.10.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Выдача с команды выглядит так:

Command: show switch

Device Type        : DES-3200-28 Fast Ethernet Switch
MAC Address        : 00-26-5A-8F-C6-40
IP Address         : 10.240.225.249 (Manual)
VLAN Name          : default
Subnet Mask        : 255.255.255.0
Default Gateway    : 10.240.225.1
Boot PROM Version  : Build 1.00.B003
Firmware Version   : Build 1.40.B005
Hardware Version   : A1
Serial Number      : PVI41A4009819
System Name        : vl-3200-
System Location    : 
System Uptime      : 2 days, 6 hours, 51 minutes, 3 seconds
System Contact     : [email protected]
Spanning Tree      : Enabled
GVRP               : Disabled
IGMP Snooping      : Enabled
VLAN Trunk         : Disabled
802.1X             : Disabled
Telnet             : Enabled (TCP 23)
Web                : Enabled (TCP 80)
RMON               : Disabled
SSH                : Disabled
SSL                : Disabled
CLI Paging         : Disabled
Syslog Global State: Enabled
Dual Image         : Supported
Password Encryption Status : Enabled

т.е. прицепиться больше не к чему...

Вообще очень интересует, почему запрос не может работать без промпта?

Это сообщение отредактировал(а) Guran - 5.10.2011, 10:00
PM MAIL   Вверх
alezzz
Дата 5.10.2011, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Guran, вы так и непоняли что от вас хотят smile. Не нашел в текстовом виде, вот картинка
user posted image
DES-3010FL:4# -- это промпт, в данном случае будет:
Код

$match = "/DES-3010FL:4#$/";
@lines = $conn->cmd(String=>"sh sw", 
              Timeout => 4, 
              Prompt => $match); 

Переделайте под ваш свитч и попробуйте.
PM MAIL   Вверх
Guran
Дата 5.10.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Естественно я пробовал эту строку ставить) но в этом случае в массив ничего не записывается.
PM MAIL   Вверх
ginnie
Дата 5.10.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Guran, покажите код с "этой строкой", а также добавьте в конструктор Input_log и Dump_Log и покажите, что запишется в лог-файлы.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Guran
Дата 6.10.2011, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В конце-концов выяснилось что надо было использовать как промпт 
Код

'm/D[EG]S-([0-9G]{4,5}|3200-28):[0-9a-z]/is'

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


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

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


 




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


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

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