我正在运行一个虚拟机,该虚拟机提供以下值以及代码运行的时间(通过在网站上执行一些操作)
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:
我试过你在Linux上做的事。也许你应该说明你运行的操作系统和网络状况。
使用
strace
我发现socket.getfqdn()
使用的是文件/etc/hosts
中提供的信息,而socket.gethostname()
只打印来自系统调用uname()
结果的数据;基本上,可以说一个请求网络模块,而另一个请求内核。两人对你的问题都有答案,但并不一定相符,因为他们对那件事有不同的看法。调用
socket.gethostbyname()
也会查询网络模块(在本例中,搜索文件/etc/hosts
的内容以查找匹配项)。把内核的答案交给网络函数并不是你真正应该做的。不过,在大多数情况下,这是可行的。你发现了一个产生奇怪结果的地方。我认为这个问题是由MacOS特有的Python错误引起的,我在https://stackoverflow.com/a/53143006/99834中提到过
好消息:你可以在你的机器上运行一个解决方案。
相关问题 更多 >
编程相关推荐