2015-02-05 1 views
0

라우터로 텔넷하여 재부팅 명령을 실행해야합니다. 그리고 그것은 파이썬으로 달성되어야합니다. 내가 가진 코드는 다음과 같습니다.Python3 텔넷 코드는 실행 후 조용하게 유지되고 라우터에 대한 명령을 시작하지 않습니다.

import sys 
import telnetlib 

HOST = "192.168.1.254" 
user = "Administrator" 
password = "xxxxxxxx" 
port = "23" 

telnet = telnetlib.Telnet(HOST,port) 
telnet.read_until(b"login: ") 

telnet.write(admin.encode('ascii') + b"\n") 
telnet.read_until(b"Password: ") 
telnet.write(password.encode('ascii') + b"\n") 

telnet.write(b"system reboot\n") 
telnet.close() 

명령 프롬프트에서 초기화 할 때 아무 것도 오류가 나타나지 않습니다. 오랫동안 무언가를로드하는 것처럼 보이지만 라우터는 재부팅하지 않습니다. 스크립트 종류가 중단됩니다.

도와 주셔서 감사합니다.

+0

출력을 생성해야합니까? 재부팅 만하면됩니다. – ForceBru

+0

죄송합니다. 제 영어 실력이 좋지 않아 잘못 설명 할 수 있습니다. 네 말이 맞아, 출력물을 생산할 필요가 없다. 하지만 라우터를 재부팅하지는 않지만 "시스템 재부팅"이라고 말했습니다. – user3596479

+0

수정 된 ur 질문을 신중하게 편집하십시오. – ForceBru

답변

-1

제 생각에는 라우터에 전달 된 문자열에 문제가 있습니다. 바이트가 아니어야합니다 (b 접두사는 필요하지 않습니다). 제거해보십시오. 문자열 인코딩 또한 이상하게 보입니다.

+0

'b'는 문자열 접두사로 __byte__ 문자열임을 의미합니다. 파이썬 2에서'b'는 아무 것도하지 않지만 파이썬 3에서는 모든 문자열이 기본적으로 유니 코드이므로 파이썬 2 스타일 문자열을 얻으려면'b'를 사용해야합니다. –

+0

@ PM2Ring, 파이썬 3은 보통 'not-byte'문자열을 처리 할 수있는'telnetlib '을 가지고 있지 않습니까? – ForceBru

+0

"시스템 재부팅"앞에서 "b"를 제거해도 도움이되지 않았습니다. – user3596479

0

질문을한지 1.5 년 후, 오늘도 똑같은 문제에 직면했습니다.

telnet.read_until(b"Password: ") # note the space before " 

이된다 :

것 같다
telnet.read_until(b"Password:") # no space before " 

이 문제로 인해으로 게재 텔넷으로 출력되지 않는 여분의 공간이 존재하는 내 경우에는, 문제 즉, 여분의 공간을 제거하여 해결되었습니다 따라서 read_until은 지정된 문자열을 찾을 수 없습니다.

관련 문제