名称或服务未知
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:名称或服务未知