Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

OT: Telnet mit Python

Allgemeines zum Thema EventGhost
Post Reply
User avatar
topix
Experienced User
Posts: 441
Joined: Sat May 05, 2007 3:43 pm
Location: Germany
Contact:

OT: Telnet mit Python

Post by topix »

Zun├ñchst mal sorry, da├ƒ ich hier etwas Frage, was nicht im direkten Zusammenhang mit EG steht. Leider gibt es hier ja kein "Off Topic". Wenn nicht gew├╝nscht, dann bitte l├Âschen.


Ich versuche per Telnet Zugriff auf ein IO-Interface zu bekommen (ELV IPIO88). Ich erhalte aber immer die Meldung "Login incorrect". Hier einmal der Python-Code:

Code: Select all

import telnetlib

tn = telnetlib.Telnet('192.168.178.100', 23)
tn.set_debuglevel(100)
tn.write('\n')
tn.read_until('name: ', 5)
tn.write('admin')
tn.write('\r')
tn.read_until('word: ', 5)
tn.write('password')
tn.write("\r")
tn.read_until('IPIO88> ',5)
tn.write('exit\r')
tn.close()
Und die Ausgabe dazu:

Code: Select all

Telnet(192.168.178.100,23): send '\n'
Telnet(192.168.178.100,23): recv '\xff\xfd\x03\xff\xfe\x01\xff\xfb\x01'
Telnet(192.168.178.100,23): IAC DO 3
Telnet(192.168.178.100,23): IAC DONT 1
Telnet(192.168.178.100,23): IAC WILL 1
Telnet(192.168.178.100,23): recv '\x1b[2J\r\nIPIO88 Telnet Server V1.00, please
login...\r'
Telnet(192.168.178.100,23): recv '\n\r\nUsername: '
Telnet(192.168.178.100,23): send 'admin'
Telnet(192.168.178.100,23): send '\r'
Telnet(192.168.178.100,23): recv 'a'
Telnet(192.168.178.100,23): recv '\r\nPassword: '
Telnet(192.168.178.100,23): send 'password'
Telnet(192.168.178.100,23): send '\r'
Telnet(192.168.178.100,23): recv '\r\nLogin incorrect'
Telnet(192.168.178.100,23): recv ''
Telnet(192.168.178.100,23): send 'exit\r'
Was micht ein bisschen stutzig macht, sind die Sonderzeichen am Anfang und das "recv 'a' " zwischen Username und Password. Wenn ich ein Terminalprogramm verwende, sieht der Login-Bildschirm so aus:

Code: Select all

IPIO88 Telnet Server V1.00, please login...

Username: admin
Password:
Bei Eingabe des Passwortes werden keine Zeichen angezeigt.
Woran k├Ânnte es also liegen, das ich mit Python keine Verbindung zustande bekomme?
CHeitkamp
Plugin Developer
Posts: 49
Joined: Sun Jan 27, 2008 12:42 pm
Location: M├╝nster / Germany

Re: OT: Telnet mit Python

Post by CHeitkamp »

Du k├Ânntest 2 Sachen versuchen:
1. alle \r durch \r\n (oder nur \n) ersetzen (\r: R├╝cksprung an Zeilenanfang \n: Zeilenvorschub)
2.

Code: Select all

tn.write('admin')
tn.write('\r')
zu

Code: Select all

tn.write('admin\r')
zusammenfassen
User avatar
topix
Experienced User
Posts: 441
Joined: Sat May 05, 2007 3:43 pm
Location: Germany
Contact:

Re: OT: Telnet mit Python

Post by topix »

Danke für den Tip. Ich habe es mit verschiedenen Kombinationen von \r\n, direkt hinter admin oder als separate Anweisung, probiert. Alles ohne Erfolg. Ich habe das Gefühl, daß die Box sich nicht richtig an den Telnet-Standard hält und/oder die telnetlib von Python nicht richtig will.
Scheint so, als müsste ich mich mal mit socks beschäftigen...
CHeitkamp
Plugin Developer
Posts: 49
Joined: Sun Jan 27, 2008 12:42 pm
Location: M├╝nster / Germany

Re: OT: Telnet mit Python

Post by CHeitkamp »

topix wrote:

Code: Select all

Telnet(192.168.178.100,23): send '\n'
Telnet(192.168.178.100,23): recv '\xff\xfd\x03\xff\xfe\x01\xff\xfb\x01'
Telnet(192.168.178.100,23): IAC DO 3
Telnet(192.168.178.100,23): IAC DONT 1
Telnet(192.168.178.100,23): IAC WILL 1
Telnet(192.168.178.100,23): recv '\x1b[2J\r\nIPIO88 Telnet Server V1.00, please
login...\r'
Was micht ein bisschen stutzig macht, sind die Sonderzeichen am Anfang und das "recv 'a' " zwischen Username und Password.
Die Sonderzeichen sind soweit schon ok - mit denen in der ersten Zeile teilt die Box mit, wie sie mit dem Client kommunizieren will/wird. Das hat die telnet-Lib in Zeile 2-4 auch ausgegeben:
  • IAC DO 3 - (3:SUPPRESS-GO-AHEAD) Der Client soll keine Go-Ahead-Zeichen schicken
  • IAC DONT 1 - (1: ECHO) Der Client soll die Empfangenen Zeichen nicht nochmal an die Box schicken "echoen"
  • IAC WILL 1 - (1: ECHO) Die Box wird empfangene Zeichen vom Client zur├╝ck an den Client schicken
Die Sequenz '\x1b[2J' in der 5. Zeile ist f├╝r VT100/VT220/...-Kompatible Programme die Anweisung den Bildschirm zu l├Âschen

Mit den Sonderzeichen ist also alles in bester Ordnung.

Dein Einwand mit dem recv 'a' ist schon eher berechtigt... eigentlich hätte da auch der Rest von admin stehen sollen...

Evtl. ist die Box ziemlich lahm... Du kannst zum Test mal folgendes versuchen:

Code: Select all

import telnetlib
import time
tn = telnetlib.Telnet('192.168.178.100', 23)
tn.set_debuglevel(100)
tn.write('\n')
tn.read_until('name: ', 5)
time.sleep(.1)
tn.write('a')
time.sleep(.1)
tn.write('d')
time.sleep(.1)
tn.write('m')
time.sleep(.1)
tn.write('i')
time.sleep(.1)
tn.write('n')
time.sleep(.1)
tn.write('\r')
time.sleep(.1)
tn.write('\n')
tn.read_until('word: ', 5)
time.sleep(.1)
tn.write('p')
time.sleep(.1)
tn.write('a')
time.sleep(.1)
tn.write('s')
time.sleep(.1)
tn.write('s')
time.sleep(.1)
tn.write('w')
time.sleep(.1)
tn.write('o')
time.sleep(.1)
tn.write('r')
time.sleep(.1)
tn.write('d')
time.sleep(.1)
tn.write('\r')
time.sleep(.1)
tn.write('\n')
tn.read_until('IPIO88> ',5)
tn.write('exit\r')
tn.close()
Die Ausgabe des Skriptes wäre interessant, wenn Du diese Version mit den "kleinen" Zwangspausen mal testest...
Post Reply