以前有人遇到过这个:
更新 DNS 记录后..我对“test.somedomain.com”进行了挖掘,我得到了 167.69.143.234,但是当我执行 socket.gethostbyname('test.somedomain.com') 时,我得到了 167.69.6.234。
我猜套接字仍在使用缓存...我该如何清除它?或冲洗它?
我的代码很简单:
Linux终端
dig test.somedomain.com
Python:
import socket
socket.gethostbyname('test.somedomain.com')
它应该返回 167.69.143.234 地址,因为这是 DNS 中更新的地址。
蟒蛇的socket.gethostbyname
使用操作系统解析器并且没有用于清除其缓存的 API。缓存(可能是操作系统使用的缓存 DNS 服务器或操作系统或标准库组件)是 DNS 系统的基本元素,处理它的“正确方法”是等待记录的 TTL 值过期(操作系统应该从缓存中删除陈旧的值)。更新 DNS 时,您可能应该提前调整旧值的 TTL。
您还可以使用 Python DNS 实现,例如 DNSPython,而不是使用socket.gethostbyname
– 那么你应该完全控制解析器缓存(但不是解析器使用的 NS 缓存)。不过,它可能无法解决您的问题(我猜是使用现有的代码)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)