Python getaddrbyhost的代理和重试

Python getaddrbyhost的代理和重试,python,proxy,Python,Proxy,这个功能一直让我失望,我做得对吗?有没有其他方法可以从IP地址获取域 def ip_to_domain(ip): for i in range(0,4): try: domain = socket.gethostbyaddr(str(ip)) return domain except IOError:

这个功能一直让我失望,我做得对吗?有没有其他方法可以从IP地址获取域

def ip_to_domain(ip):

        for i in range(0,4):
                try:
                        domain = socket.gethostbyaddr(str(ip))
                        return domain
                except IOError:
                        continue
                else:
                        break
        else:
                return False

感谢您提供的建议。

您还需要陷阱
插座。herror
。。。使用类似的方法,检查相关字段中是否有None值

import socket
def lookup(addr):
    """
    Example usage:
    name, alias, addresslist = lookup('4.2.2.2')
    """
    try:
        return socket.gethostbyaddr(addr)
    except socket.herror:
        return None, None, None
如果您想自动查找故障,请执行以下操作

import socket
import time
def relookup(addr):
    """
    Example usage:
    name, alias, addresslist = relookup('4.2.2.2')
    """
    attempts = 1
    while (attempts <= 3):
        try:
            return socket.gethostbyaddr(addr)
        except IOError, socket.herror:
            time.sleep(5)
            attempts += 1

    return None, None, None
导入套接字
导入时间
def relookup(地址):
"""
用法示例:
名称、别名、地址列表=relookup('4.2.2.2')
"""
尝试次数=1

虽然(尝试次数受限?那太奇怪了。我怀疑你正在发现同步调用是个坏主意,DNS可能需要很长时间才能告诉你没有答案。真的吗?我不知道这是什么,但在经过大量调试和不断重新运行代码后,它在这一点上开始阻塞,所以我很抱歉我做错了什么,不知道是什么。挖掘名字;)编辑:什么是“同步调用”?很多都在一起?同步调用是在继续之前等待结果的调用。你尝试过完全独立地进行查找吗?啊,对,我明白了。谢谢。不,我不知道怎么做,但我只是一个初学者。嘿,迈克!:)再次感谢,伙计,我应该同时捕获这两个错误吗?即“IOError除外,socket.herror:”还是在不同的行上?哦,是我昨天抽的雪茄,但我改了名字,因为它是|(nt)愚蠢的|(够了):)你可以对
IOError
socket.herror
使用同一行,除非你想在控制台上打印一条关于你所遇到的个别错误的错误消息。@colonwq,请使用
relookup()
查看我的编辑。。。在返回无值之前,您可以进行多次查找尝试…哦,很好。所以在那之前我没有做对?我真的不明白我在做什么。我从这里的某个帖子上抄下来的。这是一次尝试,只是东西还没有完全融入其中。为什么有三个没有。哦,对了,每次迭代?谢谢你,先生@colonwq,三个
None
值表示由
socket.gethostbyaddr()返回的参数
。。。该函数通过单个调用为您提供多个结果值(尽管许多人仅将其用于名称)