以前遇到过的人:
更新DNS记录后..我对“test.somedomain.com”进行挖掘,得到167.69.143.234,但是当我对socket.gethostbyname('test.somedomain.com')进行挖掘时,得到167.69.6.234。
我猜socket仍在使用缓存…如何清除它?还是冲水?
我的代码很简单:
Linux术语
dig test.somedomain.com
Python:
import socket
socket.gethostbyname('test.somedomain.com')
它应该返回167.69.143.234地址,因为这是DNS中更新的地址。
默认情况下,DNS不在Linux上缓存,需要一个守护进程,如
sssd
或nscd
。您可以简单地重新启动守护进程以强制拉入新地址。注意:对于Windows用户,有一个默认缓存可以用
ipconfig /flushdns
清除。或者,您可能在
/etc/hosts
中有一个硬编码条目,请先检查那里。像dig
或nslookup
这样的工具将直接查询DNS服务器并绕过NSS库子系统。Python的
socket.gethostbyname
使用操作系统解析器,并且没有清除其缓存的API。缓存(可能是操作系统或操作系统或标准库组件使用的缓存DNS服务器)是DNS系统的基本元素,处理它的“正确方法”是等待记录的TTL值过期(然后操作系统应从缓存中删除过时的值)。在更新DNS时,您可能应该提前调整旧值的TTL。您还可以使用Python DNS实现,比如DNSPython,而不是使用
socket.gethostbyname
–您应该完全控制解析器缓存(而不是解析器使用的NS缓存)。不过,它可能不会解决你的问题(我想是用现有的代码)。相关问题 更多 >
编程相关推荐