2016-05-23 1 views
1

Как я могу подключиться к ящику и вернуть его, чтобы подтвердить, что я набрал, чтобы подтвердить Я действительно вошел в систему ?????????Как я могу установить telnet в поле и читать/писать имя пользователя/пароль из словаря; и распознать некоторые подсказки

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

первой строке = Имя пользователя: второй строке = Пароль: третьей строке = TA5000>, The TA5000 является Foo четвёртой строке = TA5000 #, снова TA5000 является Foo пятой строке = TA5000 (конфигурации) #, еще раз TA5000 is foo – Ann

+0

Я еще не создал переменную для TA5000 – Ann

+0

Попробуйте [pexpect] (https://pexpect.readthedocs.io/en/stable/overview.html). Используйте атрибут 'before', чтобы увидеть, что было напечатано перед подсказкой. –

ответ

0

Это пример того, как использовать latest pexpect для управления Телнетом:

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 

Вам потребуется SocketSpawn класса, чтобы исправить дефект, который был введен в последних версиях pexpect. Однако это также должно работать со старыми версиями pexpect.