我正在开发一个脚本,它会获取域和/或IP的列表,并用它们做一堆事情。
我遇到的问题是我需要IP和域,如果可能的话,所以当我获得IP时,我尝试通过gethostbyaddr()将其解析为主机,反之亦然域名来自gethostbyname()。
这些函数会挂起一段时间,但如果它们无法解决,这会使我的脚本陷入相当程度的困境。我想做的就是如果不能立即解析名称/地址,忽略它并移动到下一个。我在这里看到了其他一些答案,但似乎没有一个是我需要的。一个似乎只适用于UNIX(我在Windows上),如果主机无法解析,其他人似乎终止了整个脚本。我只想转到下一个。
有什么想法吗?
非常感谢。
答案 0 :(得分:0)
不幸的是,在python中没有一个很好的跨平台解决方案来设置gethostbyname和gethostbyaddr的超时。
您可以使用multiprocessing.Process将gethostbyname调用包装在Process中,然后加入该过程几秒钟。
def resolve(host, ret):
ret['val'] = socket.gethostbyname(host)
for host in hostnames_to_resolve:
manager = Manager()
return_data = manager.dict()
p = multiprocessing.Process(target=resolve, args=(host,return_data))
p.start()
p.join(2) # 2 second timeout
if p.is_alive():
p.terminate()
p.join()
else:
print return_data['val'] # the result of the gethostbyname call