首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python套接字和检测没有互联网连接

Python套接字和检测没有互联网连接
EN

Stack Overflow用户
提问于 2018-12-18 17:57:31
回答 1查看 395关注 0票数 0

我正在尝试将使用Python的sockets模块执行互联网请求时可能出现的不同类型的错误分开,以便我能够适当地处理它们。特别是,当没有可用的互联网连接,我想处理,以便我可以检查和等待可用性。

我正在处理的请求是通过URL处理的,其核心是socketgetaddrinfo()函数,主要是将主机名解析为IP。对于远程主机来说,这涉及到一个DNS查询,这显然是在没有互联网的情况下无法工作的,因此,如果没有互联网连接,这将是第一个失败点。

然而,getaddrinfo()似乎对“没有互联网”(即DNS查询发送失败或超时)和不存在的域(即互联网可用并完成DNS查询/应答)都提出了同样的例外--因此,我无法检测到我所需要的任何internet条件。

例如,使用internet连接运行以下不存在的域:

代码语言:javascript
复制
socket.getaddrinfo("www.thsidomaindoesntexist12309657.com", 80)

由此产生的例外是:

代码语言:javascript
复制
socket.gaierror: [Errno 11001] getaddrinfo failed

其中errno 11001对应于socket.EAI_NONAME。这是预期的行为,因为域实际上并不存在。

但是,当我尝试以下没有internet连接的现有域(网络适配器已禁用)时:

代码语言:javascript
复制
socket.getaddrinfo("www.google.com", 80)

我得到了与以前完全相同的异常,显然表明域不存在(尽管我们无法知道,因为我们从来没有得到DNS响应)。

当我使用套接字和getaddrinfo()**?**时,怎么能检测到没有互联网连接,这是不可能的,还是我正在经历的一个错误,或者其他的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 18:17:00

如何在使用套接字和getaddrinfo()时检测到没有互联网连接

您无法从getaddrinfo获取信息。此函数是名称解析的抽象接口,可以针对本地DNS服务器执行,但也经常针对本地网络中的DNS服务器执行。函数没有提供为什么不能解析名称的信息,因为它通常不知道解析失败的原因。

除此之外,即使DNS查找成功,也不能保证实际存在一个有效的internet连接。可能是DNS查找的结果是从缓存中获取的,也可能是实际上可以解析名称,但是与目标的实际连接(如web服务器)被防火墙阻塞。它也可能是获得一个IP地址,但它是错误的,就像通常的情况下,俘虏门户。

找出是否有有效的互联网连接的常见方法是与一个特定的请求联系一个已知的好服务器,并检查响应是否与预期的一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53838639

复制
相关文章

相似问题

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