2016-05-23 6 views
1

Wie telnet ich zu einer Box und habe es Echo, was ich eingegeben habe, um zu verifizieren Ich bin wirklich angemeldet ?????????Wie telnet ich zu einer Box und lese/schreibe Benutzernamen/Passwort aus dem Wörterbuch; und erkennen bestimmte Aufforderungen

telnet = telnetlib.Telnet() 
host = "10.59.50.171" 
newline = "\n" 
telnet = telnetlib.Telnet(host, '23') 
telnet.read_until("Username: ".encode()) 
telnet.write(username) 
telnet.read_until("Password: ") 
telnet.write(password) 

user_acct = {'ADMIN':'PASSWORD','READONLY':'PASSWORD'} 

if username in user_acct and password == user_acct[username]: 
    print('Correct Login') 
else: 
    print('Invalid Login... Please Try Again') 
+0

1. prompt = Benutzername: 2. prompt = Passwort: 3. prompt = TA5000>, The TA5000 ist foo 4. prompt = TA5000 #, wieder die TA5000 ist foo 5. prompt = TA5000 (config) #, noch einmal die TA5000 ist foo – Ann

+0

Ich habe noch keine Variable für TA5000 erstellt – Ann

+0

Versuchen Sie [pexpect] (https://pexpect.readthedocs.io/en/stable/overview.html). Verwenden Sie das Attribut 'before', um zu sehen, was vor der Eingabeaufforderung gedruckt wurde. –

Antwort

0

Dies ist ein Beispiel dafür, wie die latest pexpect zu verwenden, um eine Telnet-Sitzung zu steuern:

from pexpect import fdpexpect 
import pexpect 
import select 
import socket 

class SocketSpawn(fdpexpect.fdspawn): 
    def read_nonblocking(self, size=1, timeout=-1): 
     if timeout == -1: 
      timeout = self.timeout 
     rlist = [self.child_fd] 
     wlist = [] 
     xlist = [] 
     rlist, wlist, xlist = select.select(rlist, wlist, xlist, timeout) 
     if self.child_fd not in rlist: 
      raise pexpect.exceptions.TIMEOUT('Timeout exceeded.') 
     return super(fdpexpect.fdspawn, self).read_nonblocking(size) 

if __name__ == '__main__': 
    username = 'username' 
    password = 'password' 
    host = '10.59.50.171' 
    port = 23 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((host, port)) 
    session = SocketSpawn(s, timeout=10) 
    session.expect_exact('Username: ') 
    print session.before 
    session.write("%s\n" % username) 
    session.expect_exact('Password: ') 
    print session.before 
    session.write("%s\n" % password) 
    try: 
     session.expect_exact(pexpect.EOF) 
    except pexpect.TIMEOUT: 
     pass 
    print session.before 

Sie die SocketSpawn Klasse benötigt einen Defekt zu beheben, die in den neuesten Versionen von pexpect eingeführt wurden. Dies sollte jedoch auch mit älteren Versionen von pexpect funktionieren.