2017-11-03 24 views
1

나는 파이썬 3을 통해 시스코 라우터에 텔넷 접속하고 있습니다. 그러나 스크립트를 실행 한 후 끊습니다 (하지만 Linux bash에서 라우터에 텔넷 할 수 있습니다). 제 스크립트의 발췌문을보고 아래에 출력하십시오.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')) 

그리고 이것은 라우터

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) 

debug telnet의 출력 내가 루프백 인터페이스를 만들 수 있습니다 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 

의 출력이지만, 내 리눅스 bash는하지 않는 나에게 텔넷 출력을 보여줘. 그에 따라 안내하십시오. 고맙습니다. telnetlib의

답변

2

.read_all()은 "EOF까지 모든 데이터 읽기, 연결이 닫힐 때까지 차단"이라고 설명되어 있습니다. 연결이 끊어지는 결과를 겪은 것이 없으므로 중단은 정확히 여기서 발생해야합니다. 라우터에 exit 명령을 먼저 보내보십시오. 또는 읽은 결과에 따라 추가 명령을 실행하려는 경우 .read_until() (가능하면 제한 시간을 지정)을 사용하십시오.

+0

좋아요! 그것은 효과가있다! 나는 exit 명령을 보냈습니다. 브라보. 그러나 나는 당신에게 투표권을주기에 충분한 명성이 없습니다. 제발 내 질문에 투표를 한 다음, 나는 당신의 대답에 투표 할 것입니다 :) –