我有一个程序,在python中,需要为类似1000 IP做反向DNS。为了做到这一点,我使用的是socket.gethostbyaddr,但有时候,由于某些原因,我不能在我的计算机上执行反向DNS所以这需要3000秒才能完成,因为每个IP都会在3秒后让我异常(超时 )。
所以我的问题是我不想要这个,我想知道如何检查我不能做反向DNS,所以我不再需要这样做并且输掉3000秒。
我首先尝试在超时的情况下观察返回的异常(因为我无法执行反向DNS),但socket.gethostbyaddr返回相同的异常,就像IP具有未知主机一样(在这种情况下,如果我可以做反向DNS)。
那我怎么能这样做呢?
感谢。
答案 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)
以获得想法。