Thread Net::Telnet - virtuelle Terminalgröße angeben
(27 answers)
Opened by xiconfjs at 2009-08-31 14:36
Also das funktioniert bei mir:
(getestet auf lokalem "in.telnetd") Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/usr/bin/perl use strict; use warnings; use Net::Telnet; use Net::Telnet::Options; my $username = "topeg"; my $password = "xxxxx"; my ($width, $height)=(80,100); my %options = ( TTYPE => { 'DO' => \&set_term_type } ); my $nto = Net::Telnet::Options->new(%options); $nto->activeWillOption('NAWS', {'DO' => \&set_term_size } ); my $t = new Net::Telnet (Timeout => 10, Telnetmode => 1,Prompt => '/\$\s*$/' ); # teminal auf VT100 setzen wenn danach gefragt wird. sub set_term_type { $nto->sendOpt($t, 'SB', 'TTYPE', 'IS', 'VT100'); return; } # Terminalgröße Setzen sub set_term_size { $nto->sendOpt($t, 'SB', 'NAWS', '', pack('n*', $width, $height)); return; } my $data; $t->telnetmode(0); $t->open("192.168.1.222"); # Teminal setzen # muss ich auf meinem Rechner machen, # da "top" sonst mosert. # in.telnetd fragt am anfang gleich nach, was für ein terminal wir haben. # ansonsten könnte ich das telnetmode(0) nach dem open setzen, # denn dann schluckt Net::Telnet die mögliche Frage. recv($t, $data, 1024, 0); $nto->answerTelnetOpts($t, $data); # aktiv größe des Terminal setzen $nto->doActiveOptions($t); # auf Antwort warten. recv($t, $data, 1024, 0); # und auswerten. $nto->answerTelnetOpts($t, $data); # Net::Telnet soll wieder übernehmen $t->telnetmode(1); $t->login($username,$password); # Top ausführen, # das Programm wertet die Terminalgröße aus my @lines = $t->cmd(String => 'top -n 1', Prompt => '/\n\s*\Q$username@\E/'); chomp(@lines); print "ZEILEN:".@lines."\n"; Der Code ist recht hässlich, aber funktioniert. Ich muss mal schauen ob es eleganter geht... EDIT: ein wenig am Code korrigiert (ästetik) Last edited: 2009-09-02 11:44:32 +0200 (CEST) |