2016-05-23 1 views
1

どのように私はボックスにtelnetし、確認のために入力したものをエコーし​​ますか 私は本当に?????????どのようにしてボックスに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>、TA5000がfoo 第四プロンプト= TA5000の#で、再びTA5000は再びFOO 第五プロンプト= TA5000(config)#関連であり、 TA5000はfoo – Ann

+0

です。まだTA5000の変数を作成していません。 – Ann

+0

[pexpect](https://pexpect.readthedocs.io/en/stable/overview.html)をお試しください。プロンプトの前に何が印刷されたかを見るには 'before'属性を使います。 –

答えて

0

これは、telnetセッションを制御するために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 

あなたはpexpectの最新バージョンで導入された欠陥を修正するためにSocketSpawnクラスが必要になります。ただし、これは古いバージョンのpexpectでも動作するはずです。

関連する問題