Seite 1 von 1

Problem mit telnetlib

Verfasst: Samstag 23. Februar 2008, 19:13
von Mightymod
Ich möchte mir ein kleines Verwaltungstool für Teamspeak2 schreiben, habe aber Probleme mich mit dem TS-Server zu verbinden.

Folgenden Code verwende ich:

Code: Alles auswählen

import telnetlib

HOST = "localhost"

tn = telnetlib.Telnet(HOST,51234)
tn.write("slogin admin admin\r\n")
print tn.read_all()
tn.close()

Leider hängt sich das Programm bei tn.read_all() dann auf und es kommt keine Ausgabe zurück.

Mit Wireshark habe ich dann mal mitgesnifft und alles sieht gut aus, das tn.write() wird ausgeführt und auch ein OK vom TS-Server zurückgegeben, aber tn.read_all() bekommt es nicht mit.

Was mache ich da falsch ?

Verfasst: Samstag 23. Februar 2008, 19:29
von BlackJack
`read_all()` liesst AFAIK solange bis die Gegenseite die Verbindung schliesst. Das wird in diesem Fall "nie" passieren, weil die Verbindung ja steht und die Gegenseite auf weitere Daten wartet.

Verfasst: Samstag 23. Februar 2008, 19:36
von Mightymod
Das klingt logisch. Nur wie bekomme ich die Rückgabe von tn.write() nun in eine Variable ?

Code: Alles auswählen

ausgabe=tn.write("slogin admin admin\r\n")
 
Liefert ein OK oder FAILED zurück,was aber nicht in der Variablen ausgabe steht.

Verfasst: Samstag 23. Februar 2008, 22:09
von Frank aka Ch3ck3r
ich hab auch grad (vor 4 min fertig geworden) etwas für ts gebastelt

Warum willst du über telnet gehen?
Nimm einfach sockets und connecte auf den ts

Ich kopiere dir mal meine Klasse, vielleicht kannst etwas damit anfangen

Code: Alles auswählen

import socket

class TS2(socket):
    def __init__(self,ip,port,timeout=5):
        self.address = (ip,port)
        socket.socket.__init__(self, socket.AF_INET, socket.SOCK_STREAM)
        self.settimeout(timeout)
        self.connect(self.address)
        self.recv(1024) #ts-begrüßung "[TS]\r\n" 

    def sendcmd(self, command):
        self.send(str(command)+"\r\n")

    def getmessage(self):
        message = self.recv(1024)
        return message.replace("\r\n","\n")