2012-11-18 3 views
2

python3 스크립트를 통해 hosts.txt 파일의 IP 주소를 기반으로 라우터에 텔넷을 연결하려고합니다.python3 telnet socket.gaierror : [Errno 8] 노드 이름도 servname도 제공되지 않았거나 알려지지 않았습니다.

$ ./telnet_group_1.py 
10.1.1.1 
Traceback (most recent call last): 
    File "./telnet_group_1.py", line 23, in <module> 
    tn = telnetlib.Telnet(host) 
    File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/telnetlib.py", line 209, in __init__ 
    self.open(host, port, timeout) 
    File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/telnetlib.py", line 225, in open 
    self.sock = socket.create_connection((host, port), timeout) 
    File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/socket.py", line 386, in create_connection 
    for res in geta ddrinfo(host, port, 0, SOCK_STREAM): 
socket.gaierror: [Errno 8] nodename nor servname provided, or not known 

나는 동일한 IP 주소를 사용하지만 (HOSTS.TXT 파일에서 가져온되지 않음) 스크립트에 정의 된 경우, 스크립트가 잘 작동 : 그러나 나는 다음과 같은 오류가 발생합니다. 작동하도록 코드를 변경하는 방법을 알려주십시오.

스크립트 세부 정보 :

import telnetlib, socket 

hosts = open("hosts.txt", 'r') 
output = open("output.txt", 'w') 

username = 'admin' 
password = 'admin' 

for h in hosts: 
    host_s = str(h)  
    tn = telnetlib.Telnet(host_s) 
    tn.read_until(b'Username: ') 
    tn.write(username.encode('ascii') + b"\n") 
    tn.read_until(b'Password: ') 
    tn.write(password.encode('ascii') + b"\n") 
    tn.write(b"terminal len 0\n") 
    tn.write(b"show version\n") 
    tn.write(b"exit\n") 
    print(tn.read_all().decode('ascii'), file = output) 

HOSTS.TXT는 지금과 같은 단일 항목으로 구성 - 그냥 작동하도록 :

10.1.1.1 

답변

1

당신은에서 선에 .strip()을 사용하려면 hosts 파일; 그렇지 않으면 개행 문자가 포함됩니다.

for h in hosts: 
    tn = telnetlib.Telnet(h.strip()) 
+0

@Martjin Thanks Martjin. 지금은 매력처럼 작동합니다! – gregi22

관련 문제