8

我正在运行一个虚拟机,它提供以下值以及代码何时运行(通过在网站上执行一些操作)

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

4

2 回答 2

12

我尝试了你在 Linux 机器上所做的事情。也许您应该说明您正在运行的操作系统和网络情况。

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

调用socket.gethostbyname()还查询网络模块(/etc/hosts在我的情况下搜索文件的内容以查找匹配项)。将内核的答案提供给网络功能并不是您真正应该做的。在大多数情况下,这仍然有效。你发现了一个产生奇怪结果的地方。

于 2012-11-09T14:37:53.717 回答
0

我认为这个问题是由特定于 MacOS 的 Python 错误引起的,我在https://stackoverflow.com/a/53143006/99834中提到的那个

好消息:有一种解决方法可以在您的机器上运行。

于 2018-11-04T16:53:13.003 回答