名称或服务未知

Posted

技术标签:

【中文标题】名称或服务未知【英文标题】:Name or service not known 【发布时间】:2016-11-10 07:10:17 【问题描述】:

我一直在尝试使用以下代码获取登录机器的人的 IP 地址,但出现错误。

>>> import socket
>>> socket.gethostbyname_ex(socket.gethostname())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known

相同的代码可以在其他 linux 机器上运行。 不确定我是否修复它。

【问题讨论】:

在 Arch 64 位内核 4.6.2 上工作 如果你只做socket.gethostname()会发生什么? 我正确获取了实例名称。 socket.gethostname() 的输出是否与在 Bash 上运行 echo $HOSTNAME 相同?另外,您可以发布您的/etc/hosts 文件吗? docs.python.org/2/library/socket.html#socket.gethostname - 这是您本地服务器的主机名,与登录机器的人无关。并且文档警告说,如果没有主机到 IP 的映射,您不能在结果上gethostbyname。简而言之,您的服务器配置错误,您的代码没有按照您的意愿行事。 【参考方案1】:

检查socket.gethostname() 返回的内容,看看是否可以 ping 通。基本上这是查找失败。检查您的/etc/hosts 以查看它是否已列出。我知道这看起来很奇怪,但我认为如果返回的主机名没有条目,你会得到一个名称服务失败,就是这样。

【讨论】:

【参考方案2】:

由于没有正确设置主机名而发生错误。在三个不同的地方设置主机名,分别在 -

    /etc/主机名 /etc/hosts 运行命令$主机名

然后注销并再次登录。你已经完成了。

【讨论】:

【参考方案3】:

如果您使用 IPv6 或具有多个网络接口的服务器,此命令将无法正常工作。

相反,您可以使用此命令尝试在 8.8.8.8 的端口 53 连接到 Google DNS 服务器,并返回您的 ip:

import socket
print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])

【讨论】:

以上是关于名称或服务未知的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu ssh:无法解析主机名 myserver:名称或服务未知

解决:ping: www.baidu.com: 未知的名称或服务

Rails 邮件发送:getaddrinfo:名称或服务未知

gaierror: [Errno -2] 名称或服务未知| pysftp

名称或服务未知

Mercurial hg 克隆错误 - “中止:错误:名称或服务未知”