2017-11-03 21 views
1

私はPython3経由でシスコのルータに接続しています。しかし、スクリプトを実行するとハングアップします(しかし私はLinuxのbashからルータにtelnetで接続できます)。私のスクリプトのスニペットを見て、下に出力してください。python3 telnet read_all()が動作しない

import getpass 
import telnetlib 
HOST = "10.10.32.3" 
user = input("Enter your telnet username: ") 
password = getpass.getpass() 
tn = telnetlib.Telnet(HOST) 
tn.read_until(b"Username: ") 
tn.write(user.encode('ascii') + b"\n") 
if password: 
    tn.read_until(b"Password: ") 
    tn.write(password.encode('ascii') + b"\n") 
tn.write(b"conf t\n") 
tn.write(b"int l0\n") 
print(tn.read_all().decode('ascii')) 

そして、これは私がループバックインターフェイスを作成することができますが、私のLinuxのbashにはないルータ

Router# 
*Nov 2 23:48:24.317: Telnet578: 1 1 251 1 
*Nov 2 23:48:24.318: TCP578: Telnet sent WILL ECHO (1) 
*Nov 2 23:48:24.318: Telnet578: 2 2 251 3 
*Nov 2 23:48:24.318: TCP578: Telnet sent WILL SUPPRESS-GA (3) 
*Nov 2 23:48:24.318: Telnet578: 80000 80000 253 24 
*Nov 2 23:48:24.319: TCP578: Telnet sent DO TTY-TYPE (24) 
*Nov 2 23:48:24.319: Telnet578: 10000000 10000000 253 31 
*Nov 2 23:48:24.319: TCP578: Telnet sent DO WINDOW-SIZE (31) 
*Nov 2 23:48:24.383: TCP578: Telnet received DONT ECHO (1) 
*Nov 2 23:48:24.383: TCP578: Telnet sent WONT ECHO (1) 
*Nov 2 23:48:24.387: TCP578: Telnet received DONT SUPPRESS-GA (3) 
*Nov 2 23:48:24.387: TCP578: Telnet sent WONT SUPPRESS-GA (3) 
Router# 
*Nov 2 23:48:24.389: TCP578: Telnet received WONT TTY-TYPE (24) 
*Nov 2 23:48:24.389: TCP578: Telnet sent DONT TTY-TYPE (24) 
*Nov 2 23:48:24.390: TCP578: Telnet received WONT WINDOW-SIZE (31) 
*Nov 2 23:48:24.391: TCP578: Telnet sent DONT WINDOW-SIZE (31) 
*Nov 2 23:48:24.407: TCP578: Telnet received DONT ECHO (1) 
*Nov 2 23:48:24.407: TCP578: Telnet received DONT SUPPRESS-GA (3) 
*Nov 2 23:48:24.407: TCP578: Telnet received WONT TTY-TYPE (24) 
*Nov 2 23:48:24.408: TCP578: Telnet received WONT WINDOW-SIZE (31) 

そしてshow tcp brief

Router#sho tcp brief 
TCB  Local Address    Foreign Address    (state) 
10C90CE0 10.10.32.3.23    192.168.122.61.51466  ESTAB 

の出力にdebug telnetの出力でありますtelnet出力を表示してください。それに応じてご案内ください。ありがとうございました。

答えて

2

.read_all()はtelnetlibで "EOFまですべてのデータを読む;接続が閉じられるまでブロックする"と書かれています。あなたは接続が閉じられることになる何もしていないので、ハングはまさにここで起こると予想されるものです。まずルータにexitコマンドを送信してみてください。または、読み取った結果に基づいてさらにコマンドを発行する場合は、代わりに.read_until()(おそらくタイムアウトを指定してください)を使用してください。

+0

素晴らしい!出来た!私はexitコマンドを送った。ブラボーしかし、私はあなたに投票するほどの評判はありません。私の質問に投票してください、私はあなたの答えに投票します:) –

関連する問題