The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Perl Telnet"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Perl Telnet"  +/
Сообщение от Virtual email(??) on 13-Мрт-09, 04:44 
Собственно необходим небольшой примерчик на перле:
Лгин на некое количество свитчей по телнету и скармливание им куска конфига из файла. Может у кого есть наметки в эту сторону?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • Perl Telnet, NuINu, 09:29 , 13-Мрт-09, (1)  
  • Perl Telnet, Andrey Mitrofanov, 09:31 , 13-Мрт-09, (2)  
    • Perl Telnet, Virtual, 09:52 , 13-Мрт-09, (3)  
      • Perl Telnet, sproot, 06:58 , 21-Мрт-09, (4)  
        • Perl Telnet, Virtual, 17:08 , 08-Июн-09, (5)  
      • Perl Telnet, Pahanivo, 18:06 , 08-Июн-09, (6)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Perl Telnet"  +/
Сообщение от NuINu (??) on 13-Мрт-09, 09:29 
>Собственно необходим небольшой примерчик на перле:
>Лгин на некое количество свитчей по телнету и скармливание им куска конфига
>из файла. Может у кого есть наметки в эту сторону?

попробуйте Net::Telnet

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Perl Telnet"  +/
Сообщение от Andrey Mitrofanov on 13-Мрт-09, 09:31 
for S in
perl expect site:opennet.ru/openforum/
perl telnet site:opennet.ru/openforum/
; do
  google.ru + $S$ + ENTER
done
  
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Perl Telnet"  +/
Сообщение от Virtual email(??) on 13-Мрт-09, 09:52 
>for S in
>perl expect site:opennet.ru/openforum/
>perl telnet site:opennet.ru/openforum/
>; do
>  google.ru + $S$ + ENTER
>done
>

ок, понял не дурак, был бы дурак не понял.
просто у многих есть уже наработки хотелось посмотреть как это у других

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Perl Telnet"  +/
Сообщение от sproot (ok) on 21-Мрт-09, 06:58 
>[оверквотинг удален]
>>perl expect site:opennet.ru/openforum/
>>perl telnet site:opennet.ru/openforum/
>>; do
>>  google.ru + $S$ + ENTER
>>done
>>
>
>ок, понял не дурак, был бы дурак не понял.
>просто у многих есть уже наработки хотелось посмотреть как это у других
>

#!/usr/bin/perl -w
use strict;
use Net::Telnet;

my $script_prefix       = '/usr/local/scripts/cisco';
my $r_db                = "$script_prefix/routers.list";
my $cconfig             = "$script_prefix/.config";
my $cexec               = "$script_prefix/.exec";
my $readline            = '';
my $WriteMem            = 1; # [0,1] - [NoWrite,Write]
my $IOSmode             = 1; # [0,1] - [Exec,Config]
#No work
my $StepByStepMode      = 0;
#-
my $LoopExecMode        = 0;
my $CountLoop           = 24*60*60; # 24-hours
my $WriteLog            = undef;
#my $WriteLog           = "$script_prefix/CiscoTelnetMng.log";
#-


if ( !open(ROUTERS, "<$r_db") ) {
    print "Error open file\n";
    exit;
}

while(<ROUTERS>) {
    $readline = $_;

    if ( not ($readline =~ /^#/) and not ($readline =~ /^\s*$/) ) {
        if ($readline =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|[\w.-]+)\s+(\S+)\s+(\S+)/ ) {

            my $router_ip       = $1;
            my $login           = $2;
            my $password        = $3;
            my $prompt          = '';
            my @OutLines        = ();
            my $telnet_h        = undef;
            my ($prematch, $match);

            print "Connecting to router $router_ip\n";

            eval {
                $telnet_h = new Net::Telnet(Host => "$router_ip", Timeout => 30, Dump_Log => "$script_prefix/save_conf_dump.log");
                #$telnet_h = new Net::Telnet(Host => "$router_ip", Timeout => 30);
            };

            if ( $@ ) {
                chop($@);
                printf "Error connecting: (%s) \n", $@;
                next;
            } else {
                print "Connect success!\n";
            }

            $telnet_h->max_buffer_length(500000);

            ($prematch, $match) = $telnet_h->waitfor('/Username:.*$|login:.*$/i');
            print "$match";
            $telnet_h->print($login);
            print "$login\n";

            ($prematch, $match) = $telnet_h->waitfor('/password:.*$/i');
            print "$match";
            $telnet_h->print($password);
            $password =~ s/./*/g;
            print "$password\n";

            $telnet_h->print('terminal length 0');
            print "$prompt#terminal length 0\n";
            $telnet_h->waitfor("/$prompt/");
            $telnet_h->print('terminal width 512');
            print "$prompt#terminal width 512\n";
            $telnet_h->waitfor("/$prompt/");

            if ($IOSmode) {
                $telnet_h->cmd(String => "configure terminal", Prompt => "/$prompt/");
                print "$prompt>configure terminal\n";

                if ( !open(CONF, "<$cconfig") ) {
                    print "Error open cisco config file\n";
                    print "Disconnect\n";
                    $telnet_h->close;
                    exit;
                }

                while(<CONF>) {
                    my $conf_line = $_;

                    print "$prompt(config)#$_";
                    $conf_line =~ s/\n|\r//g;

                    @OutLines = $telnet_h->cmd(String => "$conf_line", Prompt => "/$prompt/");
                    #foreach (@OutLines) {
                    #    $_ =~ s/\n|\r//g;
                    #    print ":$_:\n";
                    #}
                }

                close(CONF);

                $telnet_h->cmd(String => "\cZ", Prompt => "/$prompt#/");

                if ($WriteMem) {
                    $telnet_h->cmd(String => "write memory", Prompt => "/$prompt/");
                    $telnet_h->waitfor("/$prompt/");
                    print "\n$prompt#write memory\n";
                }
            } else {
                if ( !open(CONF, "<$cexec") ) {
                    print "Error open cisco exec file\n";
                    print "Disconnect\n";
                    $telnet_h->close;
                    exit;
                }


                while(<CONF>) {
                    my $exec_line = $_;

                    if ($LoopExecMode) {
                        if (defined($WriteLog)) {
                            if ( !open(LOG, ">$WriteLog") ) {
                                print "Error open log file!\n";
                                $telnet_h->close;
                                exit;
                            }

                            select(LOG);
                            $| = 1;
                        }

                        #скобки в Prompt экранируются двойными слешами..
                        for my $cnt (1 .. $CountLoop) {
                            my @OutLines = $telnet_h->cmd(String => "$exec_line", Prompt => "/$prompt/");

                            print "\e[H\e[2J" if (not defined($WriteLog));
                            if (@OutLines) {
                                foreach (@OutLines) {
                                    $_ =~ s/\n|\r//g;
                                    if (defined($WriteLog)) {
                                        print LOG "$_\n" if ($_ ne '');
                                    } else {
                                        print "$_\n" if ($_ ne '');
                                    }
                                }
                            }
                            sleep(1);
                        }

                        close(LOG) if (defined($WriteLog));
                    } else {
                        @OutLines = $telnet_h->cmd(String => "$exec_line", Prompt => "/$prompt/");

                        foreach (@OutLines) {
                            $_ =~ s/\n|\r//g;
                            print "$_\n";
                        }
                    }
                }

                close(CONF);
            }

            print "Disconnect\n";
            $telnet_h->close;
        }
    }
}

close(ROUTERS);
exit;


Очень давно делал. Код уже плесенью покрылся :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Perl Telnet"  +/
Сообщение от Virtual email(??) on 08-Июн-09, 17:08 
>>[оверквотинг удален]

ОГОРМНОЕ СПС!!!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Perl Telnet"  +/
Сообщение от Pahanivo email(ok) on 08-Июн-09, 18:06 
>просто у многих есть уже наработки хотелось посмотреть как это у других

как правило подобные наработки на перле - это модифицированные примеры из соотв модулей )

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру