telnet läuft nicht unter Windows SP3 ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Hallo,
ich hab schon alles versucht, jetzt wende ich mich an euch:

Ich hab ein kleines Programm geschrieben, welches sowohl im Idle als auch compiliert (mit py2exe) läuft.
Wenn ich nun das compilierte Programm auf meinem Zweitrechner ausprobiere läuft es nicht.

Code: Alles auswählen

import telnetlib

...
            self.tn = telnetlib.Telnet(self.PBX_IP, port=23, timeout=2)
            self.tn.read_until("login:",5); self.tn.write("meinLogin\n")
            self.tn.read_until("Password:",5); self.tn.write(self.PBX_PWD + "\n")
 ...
Ich habe das Verhalten mit Wireshark beobachtet. Auf meinem Zweitrechner wartet das Telnet nach dem Login für 5 Sekunden. Es schickt dann dass Passwort ab, und erhält erst anschließend die Passwortabfrage !?
Es ist egal, wie groß ich das timeout definiere. Es wartet dann entsprechend länger, aber das Verhalten ist gleich. Ich hab den verdacht, das es etwas mit dem Win-XP zu tun hat (evtl. irgendwelche unterschiedlichen dll Versionen ?)

Der Zweitrechner hat schon SP3, während der andere auf dem es funktioniert noch SP2 hat.

Habt ihr eine Idee ?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Hast Du es schon einmal ohne Timeout probiert?
MfG
HWK
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Jein ... vielleicht eine Idee, wie Du die Problemstelle einkreisen könntest.

Installier Python auf dem zweiten Rechner und teste es mal dort direkt (und nicht paketiert via Py2Exe).

Gruß
>>Masaru<<
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Hallo,
habe jetzt Python am Rechner, und teste mit idle. Das Programm verhält sich auch im idle fehlerhaft, was an meinem ersten PC (XP-SP2) nicht der Fall ist.
Habe dann mal die Zeile: self.tn.set_debuglevel(999) eingefügt, um festzustellen, wo es hakt. Aber es hakt nur, wenn die Zeile nicht vorhanden ist (grrr).

gruß,
Wolle
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Nachtrag:
in der Compilierten Version ist es egal, ob die debug Zeile vorhanden ist oder nicht. Es hakt immer.
Ohne Timeout bleibt das Program an der Stelle read_until hängen.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Hat evtl. jemand ein WIN-XP-SP3 am laufen, mit dem er Telnet mal testen kann ?
Habe heute nochmal mit Vista versucht, da läuft alles zuverlässig.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Unter Windows XP Home gibt es keinen Telnet-Dienst, was auch kein Verlust ist, da man heutzutage nur noch sowas wie ssh einsetzen sollte, läuft auch unter Windows.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Das stimmt schon, aber der Telnet Dienst am XP ist ja für eingehende Verbindungen, was eh kaum jemand auf nem XP Rechner benötigt.

Hier geht es um abgehende Verbindungen zu einem anderen Gerät (siehe code). Z. B. ein Switch oder so.

Gruß,
Wolle
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

w.olle hat geschrieben:Hat evtl. jemand ein WIN-XP-SP3 am laufen, mit dem er Telnet mal testen kann ?
Reich mir mal die Adresse irgendeines erreichbaren Telnet-Servers. Telnet habe ich seit Ewigkeiten nicht mehr aktiv.

Edit:
Bei einem Test mit einem Telnet-Server der auf dem gleichen Rechner (XP mit SP3) wie das Skript läuft zeigt sich das gleiche Verhalten wie bei dir. Schreibe ich "Passwort:" klein, so wie es der Telnet-Server auch liefert, dann läuft es erwartungsgemäß in einem Rutsch durch. Gibt es da möglicherweise Inkompatibilitäten bei der Groß- und Kleinschreibung zwischen unterschiedlichen Systemen?
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Du hast ne PN.

Danke,
Wolle
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich habe das jetzt mit den von dir angegebenen Daten auf einem Rechner mit Windows XP Professional und Service Pack 3 getestet. Hier rauscht das einfach so, ohne jegliche Wartezeiten, durch.

Die hier laufende Python-Version ist 2.6.2. Vielleicht finden wir ja da noch Unterschiede.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Da bin ich ratlos.
Gut, es funktioniert manchmal, aber sehr selten.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Hallo,
es ist schon ein bisschen her...

Heute habe ich das Programm auf meinem Ubuntu getestet (unter idle). Es hat exakt das gleiche Problem. Mit aktiviertem debug läuft es, ohne nicht ?? Das Passwort wird abgesandt noch bevor nach dem Passwort gefragt wird. Das timeout erhöhen bringt auch nichts.
Jetzt frage ich mich warum ?? Hat jemand eine Idee ?


Danke, Wolle

Anbei nochmal mein test code:

Code: Alles auswählen

import telnetlib

tn = telnetlib.Telnet("192.168.1.100", port=23, timeout=2)
tn.set_debuglevel(999)
tn.read_until("login:",5); tn.write("admin\n")
tn.read_until("Password:",5); tn.write("admin\n")
x = tn.read_until("01>",20)
print x
Zuletzt geändert von w.olle am Donnerstag 14. Januar 2010, 23:48, insgesamt 1-mal geändert.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Noch was interessantes:

mit folgendem Code geht es auch ohne Probleme:

Code: Alles auswählen

import telnetlib

tn = telnetlib.Telnet("192.168.1.100", port=23, timeout=2)
#tn.set_debuglevel(999)
print "warten auf Login"
tn.read_until("login:",5)
print "OK"
tn.write("admin\n")
print "warten auf Passwort"
tn.read_until("Password:",5)
print "OK"
tn.write("admin\n")
x = tn.read_until("01>",20)
print x
Wenn ich aber die print Anweisungen alle lösche geht es wieder nicht ??
Das iss doch n BUG oder ?
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

zu früh gefreut:
Im idle ist es wie beschrieben. Wenn ich aber den script direkt ausführe (python telnet_test.py) läuft es nicht.

:?: :?: :?:
i1337
User
Beiträge: 11
Registriert: Mittwoch 23. September 2009, 15:39

Was meinst du mit 'läuft' nicht, öfnet er das Script nicht oder macht das Script nicht das, was es soll?

Überprüf am besten nochmal ganz genau die pormpt's und
setzt das TimeOut mal Probeweise hoher (25 oder so).

Habe auch WinXp SP3 und keine Porbleme mit telent.
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Das Timeout hochsetzen bringt nichts. Im idle funktioniert es ja. Nur von der console nicht. Ohne print oder debug läuft es auch im idle nicht.

zum besseren Verständnis hier die Ausgabe wenn ich den script mit "python telnet_test.py" starte (hier funktioniert es nicht):
wolfgang@wolfgang-desktop:~/workspace/Python/DECTinst$ python telnet_test.py
ohne dieses print läuft es nicht
ohne dieses print läuft es nicht
ohne dieses print läuft es nicht
Password:
das wars
wolfgang@wolfgang-desktop:~/workspace/Python/DECTinst$
...und hier wenn ich im idle F5 drücke (hier funktioniert es):
ohne dieses print läuft es nicht
ohne dieses print läuft es nicht
ohne dieses print läuft es nicht

Last login: Tue Jul 8 12:07:42 from 192.168.1.1

...gekürzt...

Prompt0001>
das wars
i1337
User
Beiträge: 11
Registriert: Mittwoch 23. September 2009, 15:39

Hm,
also bei mir läuft das Script, musste aber statt \n als prompt \r nehmen.

Probier das mal aus, musste bei anderen Sachen auch schon mal \r\n oder \n\r\n nehmen, je nach Ziel-System
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

Hallo,
das hat leider alles nichts gebracht.

Ich habe jetzt mal am Server mit gesniffert. Es sieht so aus:
<- login:
-> admin\n
-> admin\n
<- Password:
Warum sendet python das Passwort bevor es den Passwort Prompt erhalten hat ??

Wenn ich die Debug Option einschalte sieht es OK aus:
<- login:
-> admin\n
<- Password:
-> admin\n
w.olle
User
Beiträge: 27
Registriert: Sonntag 15. November 2009, 00:28

GELÖST !!

I habe mal ein bisschen mit sleep() herum gespielt. Wahrscheinlich ist das Problem, dass der 'read_until' den socket zu lange blockiert. Dieses Problem habe ich nicht bei größeren Ausgaben, sondern nur bei login: Password:

Hier der funktionierende Code. Ich hab ihn getestet unter Ubuntu, als auch WIN-XP SP3 (Binary erzeugt mit py2exe):

Code: Alles auswählen

from telnetlib import Telnet
from time import sleep
tn = Telnet("192.168.1.100", port=23, timeout=2)
print (tn.read_until('login:',5))
sleep(1)
tn.write('admin\n')
print (tn.read_until('Password:',5))
sleep(1)
tn.write('admin\n')
print "Password is sent"
print (tn.read_until('01>',30))
Ist das jetzt ein Bug oder normal ?

Nochmals vielen Dank für die Unterstützung !
Antworten