socket.getfqdn()和socket.gethostname()在使用socket.gethostname时给出不同的IP地址

9

我正在运行一台虚拟机,它提供以下数值,并且当代码运行时(通过在网站上执行某些操作):

socket.getfqdn()
x-vps-01.abc.it

socket.gethostname()
x-vps-01

socket.gethostbyname(socket.getfqdn())
216.185.103.35

socket.gethostbyname(socket.gethostname())
78.47.171.19

请注意,当我登录终端并运行上述命令时,我总是会得到78.47.171.19

1
请描述您的网络设置,主机和虚拟机接口/ IP,以及如何连接到DNS。 - Nikolai Fetissov
2个回答

13

我在 Linux 系统上尝试了你的操作。也许你应该说明一下你运行的操作系统和网络情况。

使用 strace,我发现 socket.getfqdn() 使用的是文件 /etc/hosts 中提供的信息,而 socket.gethostname() 仅打印来自系统调用 uname() 的结果;基本上可以说一个询问网络模块,而另一个则询问内核。两者都对你的问题有答案,但它们不一定匹配,因为它们在这个问题上有不同的观点。

调用 socket.gethostbyname() 也会查询网络模块(在我的情况下,搜索文件 /etc/hosts 的内容以查找匹配项)。把内核的答案给网络函数并不是你应该做的。在大多数情况下,这样做仍然有效。你找到了一个产生奇怪结果的地方。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接