(Python) gaierror: [Errno 11004] ошибка getaddrinfo

from Tkinter import *
import tkMessageBox, socket


root = Tk()
root.title("pynet v1.0")
root.config(bg='black')
root.resizable(0,0)   

text = Text()   
text1 = Text()

text1.config(width=15, height=1)
text1.config(bg="white", fg="red")
text1.pack()

def Info():
    targetip = socket.gethostbyname_ex(text1.get("1.0", END))
    text.insert(END, targetip)

b = Button(root, text="Enter", width=10, height=2, command=Info)
b.config(fg="black", bg="red")
b.pack(side=TOP, padx=5)

scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
text.config(width=25, height=5, bg="white", fg="red")
text.pack(side=LEFT, fill=Y)
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)

root.mainloop()

Я пытаюсь получить IP-адрес веб-сайта, но постоянно получаю сообщение об ошибке «gaierror: [Errno 11004] getaddrinfo failed» в строке 18, ваша помощь будет оценена по достоинству, спасибо.

Ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Rabia\Desktop\gethostinfo.py", line 18, in Info
    targetip = socket.gethostbyname_ex(text1.get("1.0", END))
gaierror: [Errno 11004] getaddrinfo failed

person SourD    schedule 08.11.2010    source источник
comment
Чтобы никто больше не считал, строка 19 — targetip = socket.gethostbyname_ex(text1.get("1.0", END) + "\r\n")   -  person Rafe Kettler    schedule 08.11.2010
comment
Вы должны избавиться от первого дикого импорта from socket import *. Это ничего не делает, кроме снижения производительности и нарушения пространства имен. Это, вероятно, не решит вашу проблему   -  person Rafe Kettler    schedule 08.11.2010


Ответы (2)


Я предполагаю, что вы используете имя хоста с завершающей новой строкой. Когда я пишу этот ответ, ваш код показывает:

def Info():
    targetip = socket.gethostbyname_ex(text1.get("1.0", END))
    text.insert(END, targetip)

Когда вы используете индекс END, вы получаете дополнительную новую строку, которая добавляется текстовым виджетом. Вам нужно убрать это или использовать индекс "end-1c".

person Bryan Oakley    schedule 08.11.2010

Почему вы добавляете CRLF (\r\n) к имени хоста, прежде чем искать его?

Если удаление не помогло, распечатайте точный текст, который вы передаете gethostbyname, чтобы убедиться, что это действительное имя хоста.

person Ben Jackson    schedule 08.11.2010
comment
Да, я забыл удалить (\r\n), извините за это. Я просто набираю случайные веб-сайты, такие как msn.com, google.com, и ничего не работает. - person SourD; 08.11.2010
comment
Кроме того, используя индекс END, вы получаете новую строку в качестве имени хоста. - person Bryan Oakley; 08.11.2010