Python - Telnetlib socket.gaierror错误

0 投票
1 回答
2013 浏览
提问于 2025-04-30 00:40

我正在尝试通过Python创建一个telnet连接到Teamspeak 3服务器查询,这就是我的代码:

__author__ = 'Khailz'

import telnetlib, socket

HOST = "unlightedgaming.com"
port = 10011
timeout = 5



for i in range(len(HOST)):
    print "scanning " + HOST[i] + " ...\n"
    try:
        tn = telnetlib.Telnet(HOST[i],23,3)
    except socket.timeout:
        pass

#tn = telnetlib.Telnet(host, port, timeout)
#telnetlib.Telnet(host, port, timeout)

tn.read_until("Welcome to the TeamSpeak 3 ServerQuery interface")

print tn.read_all()

但是我似乎遇到了一个来自socket的错误,提示无法获取地址。

C:\Python27\python.exe C:/Users/Khailz/PycharmProjects/Teamspeak-IRC/test.py
scanning 1 ...

Traceback (most recent call last):
  File "C:/Users/KhailzXsniper/PycharmProjects/Teamspeak-IRC/test.py", line 14, in <module>
    tn = telnetlib.Telnet(HOST[i],23,3)
  File "C:\Python27\lib\telnetlib.py", line 211, in __init__
    self.open(host, port, timeout)
  File "C:\Python27\lib\telnetlib.py", line 227, in open
    self.sock = socket.create_connection((host, port), timeout)
  File "C:\Python27\lib\socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11004] getaddrinfo failed

我哪里做错了呢?

暂无标签

1 个回答

0

你在处理HOST中的每一个字符时,实际上是在尝试连接这些字符。这是因为你使用了一个for循环,并且在循环中通过索引来访问HOST。举个例子,在第一次循环时,你试图连接一个IP地址为"1"的主机,这就是为什么会出现gaierror错误。

要解决这个问题,你只需要去掉对HOST中特定位置的连接尝试:把HOST[i]去掉,直接用HOST来调用telnetlib.Telnet

tn = telnetlib.Telnet(HOST, 23, 3)

至于你用这个循环想要做什么,我就不太明白了。

撰写回答