Seite 1 von 1

Telnet Zugriff

Verfasst: Donnerstag 15. November 2012, 15:45
von Cavalera2010
Hallo zusammen,

Achtung ich bin ein Python Neuling :D
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 :shock:

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'