Thread Net::Telnet - virtuelle Terminalgröße angeben (27 answers)
Opened by xiconfjs at 2009-08-31 14:36

topeg
 2009-09-02 02:04
#125232 #125232
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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)

View full thread Net::Telnet - virtuelle Terminalgröße angeben