如何知道我是否能在python中进行反向DNS?

时间:2014-01-14 08:25:52

标签: python sockets dns

我有一个程序,在python中,需要为类似1000 IP做反向DNS。为了做到这一点,我使用的是socket.gethostbyaddr,但有时候,由于某些原因,我不能在我的计算机上执行反向DNS所以这需要3000秒才能完成,因为每个IP都会在3秒后让我异常(超时 )。

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

我首先尝试在超时的情况下观察返回的异常(因为我无法执行反向DNS),但socket.gethostbyaddr返回相同的异常,就像IP具有未知主机一样(在这种情况下,如果我可以做反向DNS)。

那我怎么能这样做呢?

感谢。

1 个答案:

答案 0 :(得分:2)

许多最终进行更低级系统调用的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')

也许这样的事情会有所帮助。虽然两个错误情况完全有可能具有相同的错误。

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