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

2024-05-29 05:07:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 程序终端网站vps时间itsocketabc
6条回答

我试过你在Linux上做的事。也许你应该说明你运行的操作系统和网络状况。

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

调用socket.gethostbyname()也会查询网络模块(在本例中,搜索文件/etc/hosts的内容以查找匹配项)。把内核的答案交给网络函数并不是你真正应该做的。不过,在大多数情况下,这是可行的。你发现了一个产生奇怪结果的地方。

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

好消息:你可以在你的机器上运行一个解决方案。

相关问题 更多 >

    热门问题