首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python3: socket.gethostbyaddr():“未知主机”与“主机名查找失败”

python3: socket.gethostbyaddr():“未知主机”与“主机名查找失败”
EN

Stack Overflow用户
提问于 2019-11-13 04:35:56
回答 1查看 2.1K关注 0票数 0

我在python3中使用python3将IP解析为主机名。

我需要区分三种情况:

代码语言:javascript
运行
复制
1) success (IP resolved to hostname)
2) IP address has no DNS record
3) DNS server is temporarily unavailable

我使用的是简单的函数:

代码语言:javascript
运行
复制
def host_lookup(addr):
    try:
        return socket.gethostbyaddr(addr)[0]
    except socket.herror:
        return None

然后我想从我的主要代码中调用这个函数:

代码语言:javascript
运行
复制
res = host_lookup('45.82.153.76')

if "case 1":
    print('success')
else if "case 2":
    print('IP address has no DNS record')
else if "case 3":
    DNS server is temporarily unavailable
else:
    print('unknown error')

当我在python控制台中尝试socket.gethostbyaddr()时,在每种情况下都会得到不同的错误代码:

代码语言:javascript
运行
复制
>>> socket.gethostbyaddr('45.82.153.76')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.herror: [Errno 1] Unknown host

当我仔细考虑使DNS无法访问时:

代码语言:javascript
运行
复制
>>> socket.gethostbyaddr('45.82.153.76')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.herror: [Errno 2] Host name lookup failure

那么,如何区分上述代码中的这些情况呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-13 09:53:55

socket.herrorOSError的子类,它提供对数值错误代码errno的访问。

代码语言:javascript
运行
复制
import socket

def host_lookup(addr):
    return socket.gethostbyaddr(addr)[0]

try:
    res = host_lookup("45.82.153.76")
    print('Success: {}'.format(res))
except socket.herror as e:
    if e.errno == 1:
        print('IP address has no DNS record')
    elif e.errno == 2:
        print('DNS server is temporarily unavailable')
    else:
        print('Unknown error')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58830397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档