Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11175[/thread]

Net::Telnet Cisco Terminalserver Problem

Leser: 3


<< >> 8 Einträge, 1 Seite
thommy1985
 2008-01-23 16:43
#105064 #105064
User since
2008-01-23
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

habe folgendes Problem. Nachfolgendes Script soll sich auf einem Cisco Terminal Server einwählen und Befehle absetzen. Der Promt ist sofort verfügbar wenn die Telnet verbindung aufgebaut ist. (kein Login, kein Passwort)


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
$inputlog  = "/home/test/input.log";             # your input logfile
$outputlog = "/home/test/output.log";    # your input logfile
use Net::Telnet;
$telnet=new Net::Telnet(Timeout=>5, Errmode=> 'Die', Port => 2004,
                                                                                Input_log => $inputlog,
                                                                                Output_log => $outputlog);


$telnet->open('10.1.1.1');
$telnet->print("\n");
$telnet->print("en");
$telnet->print("terminal length 0");
@output=$telnet->cmd('sh run');
print ("Output is: @output \n");


Ich bekomme aber in der Zeile @output=$telnet->cmd('sh run'); folgende Fehlermeldung:


Code: (dl )
1
2
root@itislanserver2:~# perl test2.pl
command timed-out at test2.pl line 14


Ausgabe der In/Outputlogs:
Code: (dl )
1
2
3
4
5
6
7
8
root@itislanserver2:~# cat input.log
root@itislanserver2:~# cat output.log


en
terminal length 0
sh run
root@itislanserver2:~#


Hat jemand ein solches Problem schon einmal gehabt? Kann mir jemand Helfen?

Schonmal vielen Dank

Thomas
Gast Gast
 2008-01-23 17:49
#105070 #105070
Am besten, würde ich empfehlen die Rückmeldungen nach jedem Command überprüffen lassen.
Bei mir funktioniert solches mit IO::Socket;
Damit kannst du alles aufbauen.

Ein Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $sock = IO::Socket::INET->new(PeerAddr => $slav, PeerPort => $port, Proto => 'tcp');
$_=<$sock>;
return if ($_ !~ /^010/);

        print $sock "user $user\r\n";
        $_=<$sock>;
        return if ($_ !~ /^305/);

        print $sock "pass $pass\r\n";
        $_=<$sock>;
        return if ($_ !~ /^301/);

        print $sock "commando beispiel\r\n";
        $_=<$sock>;
        return if ($_ !~ /^121/);
thommy1985
 2008-01-24 11:41
#105085 #105085
User since
2008-01-23
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

vielen Dank für deine schnelle Antwort. Aber leider Hilft mir das auch nicht sehr weiter.

Gruß Thomas
Gast Gast
 2008-01-24 23:35
#105131 #105131
Ja, das ist nur Beispiel, mit dem du weiter den modul benutzen kann. Und o.g rest, habe ich aus meine Script rausgezogen.
Und dazu, habe ich noch gefunden, Telnet mit Cisco
http://search.cpan.org/dist/Net-Telnet-Cisco/

In FreeBSD das ist port
Code: (dl )
1
2
3
4
5
6
7
Port:   p5-Net-Telnet-Cisco-1.10
Path: /usr/ports/net-mgmt/p5-Telnet-Cisco
Info: Perl5 module to telnet to Cisco routers
Maint: lyngbol@wheel.dk
B-deps: p5-Net-Telnet-3.03 p5-Term-ReadKey-2.30 p5-Test-Harness-2.64 p5-Test-Simple-0.64 perl-5.8.8
R-deps: p5-Net-Telnet-3.03 p5-Term-ReadKey-2.30 p5-Test-Harness-2.64 p5-Test-Simple-0.64 perl-5.8.8
WWW: http://search.cpan.org/dist/Net-Telnet-Cisco/
thommy1985
 2008-01-25 09:45
#105141 #105141
User since
2008-01-23
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin kein Perl Experte. Aber ich vermute das die "Klassen"

NET::Telnet::Cisco und
NET::Telnet::Cisco::IOS

beide von NET::Telnet abstammen.

Habe mein Problem schon mit beiden Varianten ausprobiert. Leider komme ich auch hier nicht weiter.


Gruß Thomas
nepos
 2008-01-25 11:02
#105143 #105143
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, kann es sein, dass das Problem an der Einstellung des Prompts liegt?
Denke nicht, dass der Default-Prompt auf einem Cisco-Router da übereinstimmt...
thommy1985
 2008-01-25 16:12
#105164 #105164
User since
2008-01-23
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

bin in der Sache ein wenig weiter gekommen.
Bin nun auf Java umgestiegen und arbeite mit Sokets.
Würde jedoch gerne das Problem auch mit Perl lösen.

Wie ganz zu Anfang mal beschrieben die Verbindung ist zwar Telnet port 2002 was dahinter steckt ist jedoch die gute alte Konsole.

Ich habe vor mehrere Geräte so gleichzeitig über diesen Terminalsever automatisiert mit neuem IOS und Config zu betanken. In diesem Zustand sind die Switche Router oder Antennen noch absolut blank .. also keine chance mit "echtem" Telnet oder SSH darauf zuzugreifen.

Grüße

Thomas
renee
 2008-01-25 16:49
#105168 #105168
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst genauso mit Perl Sockets verwenden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2008-01-23 16:43.