Perl net::telnet : komme nicht auf einen Router drauf

Diskutiere Perl net::telnet : komme nicht auf einen Router drauf im Developer Network Forum im Bereich Hardware & Software Forum; Hi, ich will auf einen Zyxel Router (Arcor WLAN 200) drauf um den sync wert auszulesen, aber es streikt schon beim einloggen... Mit dem Script...
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #1
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
Hi,

ich will auf einen Zyxel Router (Arcor WLAN 200) drauf um den sync wert auszulesen, aber es streikt schon beim einloggen...

Mit dem Script hier

#!/usr/bin/perl -w
use net::Telnet;
$telnet = new Net::Telnet ( Timeout=>10,
Errmode=>'die');
$telnet->open("unixserver");
$telnet->login('name', 'passwort');
@output = $telnet->cmd('ls -l');
$telnet->close("unixserver");
foreach $temp (@output) {
print $temp;
}

komme ich ohne Probleme auf einen Server drauf mit telnet.

Das Problem beim Router ist, dass der sich nicht mit username und passwort login meldet, sondern nur mit "PASSWORD:".

Und das scheint das net::telnet nicht zu verstehen.

Ich habe mit verschiedenen Sachen experementiert:


Im Dos Fenster:
telnet xxx.xxx.xxx.xxx
Verbindungsaufbau zu xxx.xxx.xxx.xxx
PASSWORD:

es fehlt also der Username, ich nehme an, dass das perl verwirrt?


Ich habe zwei Ansätze versucht:

use Net::Telnet;
my $conn = new Net::Telnet (
Host => 'xxx.xxx.xxx.xxx',
Port => 23
);
$conn->open();
print "Waitfor Password:..\n";
$conn->waitfor('/Password/');
print "Try to login ....\n";
$conn->login('user', 'passwort');
$conn->close;


Ergibt als Ausgabe:

Waitfor Password: ..
Try to login .... ( Er hat also erkannt, dass da PASSWORD: ausgegeben wird?!)
timed-out waiting for login prompt


dann habe ich versucht


$conn->open();
print "Waitfor Password:..\n";
$conn->waitfor('/Password/');
print "Try to login ....\n";
$conn->cmd("daspasswort");
$conn->close;

Ergebnis:

Waitfor Password:..
Try to login ....
command timed-out at script line xxx (wo ich per cmd das passwort übergeben will)

Und als letztes hab ich mal

$prompt = "/Password:/";
$telnet = new Net::Telnet ( Timeout=>4,
Errmode=>'die',
Prompt => $prompt);


versucht, auch ohne Ergebnis... ich sehe halt nicht wirklich, wie der "prompt" des Router ist...
Das ganze versuche ich nun schon Stunden :(

Habt ihr irgend eine Idee? Gehen muss es, es gibt nämlich eine Freeware namens ZyXEL Prestige Monitor, und der kann sich immerhin auch connecten und den Router auslesen...
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #2
Z

Zombie79

Bekanntes Mitglied
Dabei seit
05.10.2001
Beiträge
6.132
Reaktionspunkte
2
Schau mal hier:
[...] login - perform standard login
[...]
Consider using a combination of print() and waitfor() as an alternative to this method when it doesn't do what you want, e.g. the remote host doesn't send a username prompt. [...]

Probiere also mal:
Code:
$conn->open();
print "Waitfor Password:..\n";
$conn->waitfor('/PASSWORD:/');
print "Try to login ....\n";
$conn->print("daspasswort");
$conn->close;

PS: Es wäre echt knorke, wenn du nicht explizit weiß schreiben würdest. Dann könnte man deinen Code auch mit dem grauen Style lesen. ;)

/edit:
Ich habe es gerade mit einem Netgear WLAN AP ausprobiert, der sich auch nur mit "Password:" meldet. Ethereal hat mir verraten, dass der Login damit klappt.

Mein Code:
Code:
#!/usr/bin/perl -w
use Net::Telnet;
my $out;
my $conn = new Net::Telnet(
	Host => 'hostname.des.wlan.ap',
	Port => 23
);
$conn->prompt('/mr314>/');

$conn->open();
print "Waitfor Password: ...\n";
$conn->waitfor('/Password:/');
print "Try to login ...\n";
$conn->print('meinPasswort');

$conn->waitfor('/mr314>/');
($out) = $conn->cmd("sys countrycode");
$conn->close;

print "Output: " . $out;

Und die Ausgabe:
Code:
$ ./connect.pl
Waitfor Password: ...
Try to login ...
Output: country code = 237
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #3
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
Vielen dank, das funktioniert ganz prima jetzt mit dem Login :) !


Wegen der Farbe :D Ich wollte die erst blau machen, sah dann aber doof aus, dann weis, dann hab ich gesehen dass das die default Farbe war dann... hab ichs gelassen ;) :D

Allerdings macht er Probleme wenn ich ein commando absetzen will mit cmd, die prints führt er aus...



use Net::Telnet;
$conn = new Net::Telnet (
Host => "192.168.0.254",
Port => 23
);

$conn->open();
print "Waitfor Password:..\n";
$conn->waitfor('/Password/');

print "Try to login ....\n";
$conn->print("dasPasswort");

print "Waiting for MainMenue\n";
$conn->waitfor('/Main/');
print "MainMenue is here\n\n";

print "Waiting for Maintenance Menue\n";
$conn->print("24");
$conn->waitfor('/Maintenance/');
print "Maintenance Menue is here\n\n";

print "Waiting for RAS Prompt\n";
$conn->print("8");
$conn->waitfor('/ras/');
print "RAS is here\n\n";

#(@out) = $conn->print("wan adsl chandata");
($out) = $conn->cmd("sys countrycode");
$conn->close;

print $out;


Ergebnis :


C:\>perl tel.txt
Waitfor Password:..
Try to login ....
Waiting for MainMenue
MainMenue is here
Waiting for Maintenance Menue
Maintenance Menue is here
Waiting for RAS Prompt
RAS is here
command timed-out at tel.txt line 33

Grübel...
 
Zuletzt bearbeitet:
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #4
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
ich kann mit print durch die Menüs steuern und auch commandos absetzen, dummerweise bekommt man nur den Wert 1 zurück, wenn es geklappt hat, nicht das, was der router antwortet. d.h. ich kann zwar aktuell den router per script resetten, aber noch nicht den sync auslesen (wan adsl chandata)...
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #5
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
arg... ich kann nicht editieren obwohls erst eine Minute her ist...naja, also

EDIT: ich habe eventuell eine Lösung, ist aber nicht gaaaanz so sauber... um den Output zu bekommen...


Mit

($out) = $conn->print("wan adsl chandata");
($prematch, $match) = $conn->waitfor('/ras/');
print "RAS is here\n\n";


$conn->close;

print"1pre $prematch \n\n2match\n $match";

Er führt quasi den Befehl aus und wartet dann wieder auf den ras prompt und
dabei dann speichert er in $prematch, was alles ausgegeben wird, bevor er das findet, worauf er wartet... eieieie
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #6
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
Das Programm steht ;) bis Montag wird es bei mir zuhause am ADSL2 Anschluß noch getestet werden, dann wird es kompiliert und freigegeben. Wen es interessiert: es ist für Leute die ADSL2+ mit einem Arcor DSL Wlan 200 Router aber das Problem haben, dass dieser mit der Zeit den Leitungssync immer weiter runterfährt und man so von 18 auf z.B. 8mbit fällt nach xx stunden. Und mein Script wird dem ein Ende setzen ;) Fullspeed für alle :D
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #7
Z

Zombie79

Bekanntes Mitglied
Dabei seit
05.10.2001
Beiträge
6.132
Reaktionspunkte
2
Bevor du einen Befehl absetzen kannst, musst du definiert haben, wie das darauf folgende Prompt aussieht. Sonst wartet er auf das (nicht definierte bzw. falsche) Prompt und läuft in einen Timeout.

Probiere es mal so:
Code:
$conn->waitfor('/ras/');

# set next prompt & exec command
$conn->prompt('/ras/');
($out) = $conn->cmd("wan adsl chandata");
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #8
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
Hi, hatte ich probiert, allerdings bekam er trotzdem immer einen timeout...hm egal. Trotzdem vielen Dank, ohne deinen Hinweis auf wait und print wäre ich nicht in den Router gekommen ;)

Das Script ist fertig, wird am Anfang der Woche kompiliert und der Allgemeinheit freigegeben ,)

cu

ps: ist ein kleiner schlanker 650Zeiler geworden :D
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #9
Z

Zombie79

Bekanntes Mitglied
Dabei seit
05.10.2001
Beiträge
6.132
Reaktionspunkte
2
drmaniac schrieb:
[...] Das Script ist fertig, wird am Anfang der Woche kompiliert und der Allgemeinheit freigegeben ,) [...]
Warum gibst du es nicht als OpenSource frei? Es ist wirklich interessant, welche Änderungen und Verbesserungen durch die Community am eigenen Code so vorgenommen werden. Davon wird man nicht dümmer. ;)
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #10
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
Sowas hatte ich ja vor, in einem zip den Quellcode als auch die kompilierte Version. Wie man sowas allerding so offiziell freigibt, irgendwo einstellt, dass wenn Änderungen erfolgen man davon auch was mitbekommt.. keine Ahnung wie und wo man das lancieren sollte?
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #11
Z

Zombie79

Bekanntes Mitglied
Dabei seit
05.10.2001
Beiträge
6.132
Reaktionspunkte
2
SourceForge ist z.B. eine gute Plattform dafür. Wenn du es unter der GPL veröffentlichst, stellst du (zumindest rechtlich) sicher, dass du die geänderten Versionen deines Tools auch zu sehen bekommst.

Eine README Datei in der du zusätzlich erwähnst, dass du gern über Änderungen und Verbesserungen informiert werden möchtest, kann auch nicht schaden. ;)
 
  • Perl net::telnet : komme nicht auf einen Router drauf Beitrag #12
D

drmaniac

Bekanntes Mitglied
Dabei seit
20.05.1999
Beiträge
6.033
Reaktionspunkte
2
Ort
Germany
prima, hab mich angemeldet und ein neues Projekt aufgemacht, sollte in 2 Tagen laut denen geprüft sein :)
 
Thema:

Perl net::telnet : komme nicht auf einen Router drauf

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben