Telnet Zugriff

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Cavalera2010
User
Beiträge: 5
Registriert: Donnerstag 15. November 2012, 15:12

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
Zuletzt geändert von Cavalera2010 am Donnerstag 15. November 2012, 16:26, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

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.
Cavalera2010
User
Beiträge: 5
Registriert: Donnerstag 15. November 2012, 15:12

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
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Cavalera2010
User
Beiträge: 5
Registriert: Donnerstag 15. November 2012, 15:12

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
Cavalera2010
User
Beiträge: 5
Registriert: Donnerstag 15. November 2012, 15:12

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
Cavalera2010
User
Beiträge: 5
Registriert: Donnerstag 15. November 2012, 15:12

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
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

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'
Antworten