Telnet - Befehle senden

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Niklas3008
User
Beiträge: 3
Registriert: Donnerstag 20. März 2014, 19:51

Hallo,

ich bin ziemlich neu in der Python Welt, jetzt habe ich folgendes Problem: und zwar möchte ich mich zu meiner FritzBox per Telnet verbinden und dort einen Befehl ausführen!
Der Befehl ist folgender:
# echo "ATDT**610" | nc 127.0.0.1 1011

Das Problem ist jetzt bloß, dass ich nicht weiß wie ich diesen genau so senden kann... Mein Skript sieht so aus:

Code: Alles auswählen

import sys
import telnetlib

HOST = "192.168.178.1"
password = "####"
port = "23"
eingabe = (#echo "ATDT**610" | nc 127.0.0.1 1011)
telnet = telnetlib.Telnet(HOST,port)

telnet.read_until(b"password: ")
telnet.write(password.encode('ascii') + b"\n")
telnet.write(eingabe.encode('ascii') + b"\n")
telnet.write(b"exit\n")
So funktioniert dies allerdings nicht!

Ich hoffe ihr könnt mir helfen

Mfg

Niklas3008
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Mit Telnet kenne ich mich nicht so gut aus, aber vielleicht kann dir diese beispiel weiterhelfen, da wird ein Kommando an den Telnetport 7072 gesendet.
http://forum.fhem.de/index.php?topic=16297.0
Benutzeravatar
Balmung
User
Beiträge: 44
Registriert: Sonntag 17. März 2013, 18:36

Das einzige was mir auffällt ist, dass das Beispiel in den docs b"Password: " nutzt und nicht etwa wie du b"password: ".
»Honk Honk«
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Niklas3008 hat geschrieben:So funktioniert dies allerdings nicht!
Was meinst Du damit? Ich rate jetzt mal: Du erhältst keinen Zugang? Weil Dein Passwort nicht '####' lautet?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Niklas3008
User
Beiträge: 3
Registriert: Donnerstag 20. März 2014, 19:51

Hallo,

nein, ich kann mich ja einloggen, bloß weiß ich nicht wie ich # echo "ATDT**610" | nc 127.0.0.1 1011 so direkt senden kann! Wenn ich es so eintrage, dann bekomme ich invalid Syntax, das restliche Skript funktioniert schon!
BlackJack

@Niklas3008: Natürlich bekommst Du einen Syntaxfehler wenn Du das einfach so in ein Python-Programm schreibst. Schau Dir doch einfach mal die farbliche Syntaxhervorhebung im ersten Beitrag an, da ist eine öffnende Klammer und dann folgt ein Kommentar und die öffnende Klammer wird nie wieder geschlossen. Da Kommentare nur für den menschlichen Leser sind und von der Laufzeitumgebung einfach ignoriert werden, steht da zum Ausführen einfach nur:

Code: Alles auswählen

eingabe = (
Und was sollte Python mit dieser Anweisung auch anfangen, ausser zu sagen dass es sie nicht versteht.

Genau wie Du von der anderen Seite Byteketten bekommst und mit Konstanten von diesem Typ vergleichst, musst Du Daten auch als Byteketten senden, also wenn sie im Programm als Werte stehen als `bytes`-Literale schreiben.

Das nächste Problem ist dann, dass das ``#``-Zeichen nicht nur in Python einen Kommentar bis zum Zeilenende einleitet, sondern auch auch der Linux-Shell. Eine Zeile die damit beginnt hat also keinerlei Effekt. Das ``#`` steht in Anleitungen häufig als Signal das die Zeile mit root-Rechten ausgeführt werden muss, weil beim root-Benutzer der Shell-Prompt üblicherweise mit diesem Zeichen aufhört, während bei normalen Benutzern an der Stelle ein ``$`` steht. Was dementsprechend in Anleitungen als erstes Zeichen vor Eingaben steht, die man als normaler Benutzer in der Shell vornehmen muss.

Code: Alles auswählen

bj@god:~$ # echo 'hallo, welt!'
bj@god:~$ echo 'hallo, welt!'
hallo, welt!
bj@god:~$ sudo -i  # Wir erlangen root-Rechte.
[sudo] password for bj: 
root@god:~#
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Niklas3008
Das geschieht durch copy & paste... :wink: Der Befehl lautet sicherlich nicht ``# echo "ATDT....``. Und "invalid syntax" bedeutet "invalid syntax"... Du möchtest einen String, der ein (genaugenommen zwei) Kommandos enthält, an den Namen `eingabe` binden. Da solltest Du nochmals draufschauen.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Niklas3008
User
Beiträge: 3
Registriert: Donnerstag 20. März 2014, 19:51

Hallo,

ok habe dass Problem jetzt gelöst...

Danke
Antworten