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

时间:2012-11-09 14:05:25

标签: python sockets

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

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

2 个答案:

答案 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中提到了该问题

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