【问题标题】:How to know if I'm able to do reverse DNS in python?如何知道我是否能够在 python 中进行反向 DNS?
【发布时间】:2014-01-14 08:25:51
【问题描述】:

我有一个程序,在 python 中,需要为 1000 IP 做一个反向 DNS。为此,我使用了 socket.gethostbyaddr,但有时,由于某些原因,我无法在我的计算机上执行反向 DNS,因此需要大约 3000 秒才能执行此操作,因为每个 IP 都会在 3 秒后给我一个异常(超时 )。

所以我的问题是我不想要这个,我想知道我如何检查我不能做反向 DNS,所以我不再需要这样做并损失 3000 秒。

我首先尝试在超时的情况下查看返回的异常(因为我无法进行反向 DNS),但 socket.gethostbyaddr 返回的异常与 IP 具有未知主机一样(如果我可以做反向 DNS )。

那么我该怎么做呢?

谢谢。

【问题讨论】:

    标签: python sockets dns


    【解决方案1】:

    许多 Python 函数最终会产生更多的低级系统调用,它们会为所有错误返回相同的异常类。但他们通常会设置 errno 或其他属性,这可能会因情况而异。

    try:
        hostname = socket.gethostbyaddr(an_ip_address)[0]
    except Exception as exc:
        if exc.errno == 2:
            raise Exception('Not able to do reverse DNS at this time, aborting')
    

    也许这样的事情会有所帮助。尽管两种错误情况完全有可能具有相同的 errno。

    在我的实验中(在 Linux 下),当我关闭网络连接时,我得到 2 的 errno 进行查找,当我要求查找不存在的地址时,得到 1 的 errno。您也可以将 strerror 用于相同目的。在我的实验中,e.strerror 分别设置为“主机名查找失败”和“未知主机”。如果您不确定为异常设置了哪些属性,您可以随时通过dir(e) 来了解一下。

    【讨论】:

    • 这正是我搜索的内容,就我而言,由于某些原因,我得到了相同的 errno,但这是另一个问题,但它对我有很大帮助!谢谢你。
    • 呃,这很烦人。你在用窗户吗?如果两个异常完全相同,则必须进行二次测试。在每种情况下,机器都必须有所不同。但很难确定这可能是什么。
    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2013-06-20
    • 2013-06-28
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多