#!/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";