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

Jam*_*mal 5 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
Run Code Online (Sandbox Code Playgroud)

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

Alf*_*lfe 9

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

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

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