Seite 1 von 1

Telnet - Befehle senden

Verfasst: Donnerstag 20. März 2014, 19:55
von Niklas3008
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

Re: Telnet - Befehle senden

Verfasst: Donnerstag 20. März 2014, 22:33
von Malta
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

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 00:20
von Balmung
Das einzige was mir auffällt ist, dass das Beispiel in den docs b"Password: " nutzt und nicht etwa wie du b"password: ".

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 09:30
von mutetella
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

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 09:33
von Niklas3008
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!

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 09:50
von 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:~#

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 09:56
von mutetella
@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

Re: Telnet - Befehle senden

Verfasst: Freitag 21. März 2014, 09:58
von Niklas3008
Hallo,

ok habe dass Problem jetzt gelöst...

Danke