Telnet Verbindung aufbauen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Hallo zusammen,

ich möchte eine telnet- Verbindung zu einem Messgerät aufbauen. Wenn ich mit IP und Port Commands über PuTTY schicke, bekomme ich die entsprechenden Antworten zurück. Genau diese Funktionalität möchte ich nun in mein Python-Programm implementieren.
Auf sämtlichen anderen Messgeräten konnte ich via socket eine Verbindung aufbauen.

Code: Alles auswählen

equipment = socket.socket()
equipment.connect(IPaddr,Portnr)
Wie müsste der entsprechende Code für eine telnet- Verbindung aussehen?
Vielen Dank im Voraus!

Grüße,
Dominik
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

In der Standard-Lib gibt es ein Modul für Telnet: https://docs.python.org/3/library/telnetlib.html

Das solltest Du mal probieren :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Auf dieses Modul bin ich bereits gestoßen, allerdings habe ich weiterhin Probleme eine Verbindung aufzubauen.
Wie muss ich die Verbindung aufbauen, wenn ich das Modul "telnetlib" importiert habe?
Stehe leider gerade auf dem Schlauch...
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@dominik123: Hast du schon das Beispiel aus der Dokumentation ausprobiert?
In specifications, Murphy's Law supersedes Ohm's.
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Ja, scheinbar wird auch eine Verbindung aufgebaut, allerdings kann ich nichts zurücklesen.

Code: Alles auswählen

import telnetlib

tn = telnetlib.Telnet("129.168.3.80",4001)
tn.write("$01I\n")
variable = tn.read_until("z",5)
print (""+variable)
Im Normalfall sollte ein String zurückgelesen werden der in etwa aussieht wie folgt:
(-040.0 -039.5 0050.0 0000.0 0100.0 0100.0 0000.0 0100.0 0000.0 0100.0 0000.0 0000.0 0000.0 0000.0 01000000000000000000000000000000)

Vielen Danke für die bisherigen Antworten!
dominik123
User
Beiträge: 35
Registriert: Montag 10. Februar 2014, 08:48

Ok mit "\r" anstelle von "\n" funktioniert das zurücklesen...
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@dominik123: Historischerweise werden bei Telnet-Verbindungen Zeilen häufig mit \r\n abgeschlossen (ähnlich wie bei HTTP).
Antworten