我正在运行一个虚拟机,它提供以下值以及代码运行时(通过在网站上执行某些操作)
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
答案 0 :(得分:8)
我尝试过在Linux机器上做的事情。也许您应说明您正在运行的操作系统和网络情况。
使用strace
我发现socket.getfqdn()
正在使用文件/etc/hosts
中提供的信息,而socket.gethostname()
仅打印系统调用结果中的数据uname()
;基本上你可以说一个问网络模块而另一个问内核。两者都有你的问题的答案,但他们不一定匹配,因为他们对此问题有不同的看法。
调用socket.gethostbyname()
也会查询网络模块(在我的情况下搜索文件/etc/hosts
的内容以查找匹配项)。将内核的答案提供给网络功能并不是您应该做的。在大多数情况下,这仍然可行。你找到了一个产生奇怪结果的地方。
答案 1 :(得分:0)
我认为此问题是由MacOS特有的Python错误引起的,我在https://stackoverflow.com/a/53143006/99834中提到了该问题
好消息:您可以在计算机上运行一种解决方法。