根据主机名提取信息时socket.getaddrinfo()报错如何解决
错误原因
- 主机名配置无效:代码中
host变量的值为占位符defined_here,并非真实存在可解析的域名/主机名,DNS服务无法找到对应记录。 - 网络或DNS配置异常:本机未联网、DNS服务器配置错误,无法正常发起域名解析请求。
- 内网主机名未配置映射:如果使用自定义内网主机名,未在本地hosts文件中添加IP与主机名的对应关系,DNS无法解析内网私有主机名。
- 本地拦截规则限制:防火墙、杀毒软件拦截了DNS请求,导致解析流程中断。
解决方法
- 替换为真实主机名:将
host变量的值修改为真实可解析的域名,例如host = "www.baidu.com",不要使用无意义的占位字符串。 - 验证网络连通性:在系统命令行执行
ping 目标主机名,确认目标主机名可以正常解析出IP,本机网络连接正常。 - 配置内网主机名映射:如果使用内网自定义主机名,在本地hosts文件添加对应映射规则,Windows系统hosts路径为
C:\Windows\System32\drivers\etc\hosts,Linux/macOS系统路径为/etc/hosts。 - 调整本地网络配置:可尝试切换公共DNS(如114.114.114.114、8.8.8.8),临时关闭防火墙测试是否是拦截规则导致的解析失败。
- 增加异常捕获逻辑:优化代码增加异常处理,避免解析失败直接崩溃,参考代码如下:
import socket host = "www.baidu.com" try: info = socket.getaddrinfo(host, 'http') print("解析结果:", info) except socket.gaierror as e: print(f"域名解析失败,错误码:{e.errno},错误信息:{e.strerror}")
内容的提问来源于stack exchange,提问作者Abhijeet Gupta
相关产品推荐
相关产品推荐

