Python 在使用socket.gethostname时,socket.getfqdn()和socket.gethostname()提供不同的IP地址

Python 在使用socket.gethostname时,socket.getfqdn()和socket.gethostname()提供不同的IP地址,python,sockets,Python,Sockets,我正在运行一个虚拟机,该虚拟机在代码运行时提供以下值(通过在网站上执行某些操作) 请注意,当我登录终端并运行上面的程序时,我总是 78.47.171.19我尝试了您在Linux机箱上所做的操作。也许您应该说明您正在运行的操作系统和网络状况 使用strace我发现socket.getfqdn()正在使用文件/etc/hosts中提供的信息,而socket.gethostname()只打印来自系统调用结果的数据uname();基本上,您可以说一个请求网络模块,而另一个请求内核。两人对你的问题都有答案

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

请注意,当我登录终端并运行上面的程序时,我总是
78.47.171.19

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

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


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

我认为这个问题是由MacOS特有的Python错误引起的,我在


好消息:您可以在计算机上运行一种变通方法。

描述您的网络设置、主机和VM接口/IP,以及如何连接到DNS。
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