如何刷新socket.gethostbyname响应的缓存?

2024-05-05 19:50:14 发布

您现在位置:Python中文网/ 问答频道 /正文

以前遇到过的人:

更新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中更新的地址。


Tags: 代码testimportcomdnslinux地址记录
2条回答

默认情况下,DNS不在Linux上缓存,需要一个守护进程,如sssdnscd。您可以简单地重新启动守护进程以强制拉入新地址。

注意:对于Windows用户,有一个默认缓存可以用ipconfig /flushdns清除。

或者,您可能在/etc/hosts中有一个硬编码条目,请先检查那里。像dignslookup这样的工具将直接查询DNS服务器并绕过NSS库子系统。

Python的socket.gethostbyname使用操作系统解析器,并且没有清除其缓存的API。缓存(可能是操作系统或操作系统或标准库组件使用的缓存DNS服务器)是DNS系统的基本元素,处理它的“正确方法”是等待记录的TTL值过期(然后操作系统应从缓存中删除过时的值)。在更新DNS时,您可能应该提前调整旧值的TTL。

您还可以使用Python DNS实现,比如DNSPython,而不是使用socket.gethostbyname–您应该完全控制解析器缓存(而不是解析器使用的NS缓存)。不过,它可能不会解决你的问题(我想是用现有的代码)。

相关问题 更多 >