Seite 1 von 1
Telnet Zugriff
Verfasst: Donnerstag 15. November 2012, 15:45
von Cavalera2010
Hallo zusammen,
Achtung ich bin ein Python Neuling
Ich wollte mir ein kleines Script (Python Version 3.3) schreiben um per Telnet auf meine Cisco Router zu kommen.
Außerdem soll es die aktuelle Konfiguration auslesen und mir diese anzeigen.
Auf meinem Rechner läuft Windows 7 und Telnet ist aktiviert.
Hier der Quellcode:
Code: Alles auswählen
import telnetlib
def telNetCall():
host = "x.x.x.x"
user = "haha"
password = "blabla123"
telnet = telnetlib.Telnet(host)
telnet.read_until('Username: ', 3)
telnet.write(user + '\r')
telnet.read_until('Password: ', 3)
telnet.write(password + '\r')
telnet.write("sh run"+ "\r\n")
print(telnet.read_all())
Wenn ich per cmd nun das kleine Script aufrufe, bringt er zwar keinerlei Fehlermeldung
allerdings wird nichts ausgegeben... es passiert einfach nichts.
Ist bestimmt nur ein Denkfehler...
Grüße
Cava
Re: Telnet Zugriff
Verfasst: Donnerstag 15. November 2012, 16:13
von sparrow
Bitte editiere deinen Beitrag und setze deinen Quelltext in python-Tags (also davor ein [*python] und danach ein [*\python] jeweils ohne die "*". Oder du verwendest den Button über dem Editor-Feld. Ohne Tags gehen deine Einrückungen verloren, und die sind unter Python enorm wichtig.
Wenn das dein ganzer Quelltext ist, sehe ich auf Anhieb nicht wo die Funktion eigentlich aufgerufen wird, die etwas tun soll.
Re: Telnet Zugriff
Verfasst: Donnerstag 15. November 2012, 16:25
von Cavalera2010
Hallo Sparrow,
Code: Alles auswählen
import telnetlib
def telNetCall():
host = "x.x.x.x"
user = "haha"
password = "blabla123"
telnet = telnetlib.Telnet(host)
telnet.read_until('Username: ', 3)
telnet.write(user + '\r')
telnet.read_until('Password: ', 3)
telnet.write(password + '\r')
telnet.write("sh run"+ "\r\n")
print(telnet.read_all())
Ist die Funktion nicht "print" der ich Telnet.read_all() übergebe?
Wie müsste ich es denn schreiben?
Grüße
Cava
Re: Telnet Zugriff
Verfasst: Donnerstag 15. November 2012, 16:52
von /me
Cavalera2010 hat geschrieben:Ist die Funktion nicht "print" der ich Telnet.read_all() übergebe?
Und wo rufst du deine Funktion
telNetCall auf? Von alleine startet die sich nicht.
Re: Telnet Zugriff
Verfasst: Donnerstag 15. November 2012, 17:45
von Cavalera2010
Hallo,
stimmt
Ok also müsste es so funktionieren (kann es grad nicht testen):
Code: Alles auswählen
import telnetlib
def telNetCall():
host = "x.x.x.x"
user = "haha"
password = "blabla123"
telnet = telnetlib.Telnet(host)
telnet.read_until('Username: ', 3)
telnet.write(user + '\r')
telnet.read_until('Password: ', 3)
telnet.write(password + '\r')
telnet.write("sh run"+ "\r\n")
print(telnet.read_all())
telNetCall()
Grüße
Cava
Re: Telnet Zugriff
Verfasst: Freitag 16. November 2012, 08:43
von Cavalera2010
Hallo zusammen,
wenn ich den Code ausführe kommt folgende Meldung:
Traceback (most recent call last):
File "Telnet_Test.py", line 17, in (module)
telNetCall()
File "Telnet_Test.py", line 8, in telNetCall
telnet.read_until(´username: ´, 3)
File "C:\Python33\lib\telnetlib.py", line 295, read_until
return self.read_until_with_select(match, timeout)
File "C:\Python33\lib\telnetlib.py", line 349, in_read_until_with_select
i = self.cookedq.find(match)
TypeError: Type str doesn`t support the buffer API
Kann mir hier jemand weiterhelfen?
Grüße
Cava
Re: Telnet Zugriff
Verfasst: Sonntag 18. November 2012, 19:22
von Cavalera2010
Hallo,
leider finde ich den Fehler immer noch nicht.
Ich denke von der Syntax her stimmt evtl. etwas nicht (Python 2.X | 3.X)
Grüße
Cava
Re: Telnet Zugriff
Verfasst: Sonntag 18. November 2012, 20:20
von sparrow
Unter Python 3.x gibt es zwei Sorten von Zeichenketten:
str = kodierte Zeichenkette
byte = unkodierte Zeichenkette
Der hier auftretende Fehler weist in der Regel darauf hin, dass "bytes" erwartet wird.
Code: Alles auswählen
>>> a = "str"
>>> b = b"byte"
>>> type(a), type(b)
(<class 'str'>, <class 'bytes'>)
>>> b.replace("y", "z")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected an object with the buffer interface
>>> b.replace(b"y", b"z")
b'bzte'