You need to enable JavaScript to run this app. .NET Core 3.1循环调用Dns.GetHostAddresses抛出No such host is known错误
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1循环调用Dns.GetHostAddresses抛出No such host is known错误

报错核心诱因
  • .NET Core 3.1 的DNS解析实现存在已知缺陷:该版本对Windows原生DNS解析API的封装未做高频调用适配,短时间连续触发解析时,会出现非托管句柄释放不及时的问题,直接抛出错误码11001的SocketException,并非真的目标主机不存在。
  • Win10系统DNS客户端的节流机制:你要解析的是Hyper-V NAT网络下的Ubuntu虚拟机,这类主机的名称解析完全依赖LLMNR/NBT-NS多播查询链路,没有hosts静态映射或内部DNS服务器的兜底。当短时间内连续发起同主机名的多播解析请求时,系统dnscache服务会判定请求异常,直接返回“主机不存在”的结果,不会实际下发解析查询包。
  • 代码逻辑缺少缓存兜底:循环中没有留存首次解析成功的IP结果,每次调用都直接触发系统DNS接口,完全没有利用系统DNS的缓存有效期,进一步放大了上述两个问题的触发概率。
对应解决思路
  • 给代码增加内存级结果缓存:首次解析拿到正确IP后,在应用内存中留存主机名与IP的映射关系,后续循环直接复用结果,不重复触发系统DNS解析调用。
  • 若确需定期重新解析IP,在两次调用间设置1-2秒的基础延时,遇到11001错误时搭配短间隔重试(最多2-3次),规避系统dnscache的节流判定。
  • 给目标虚拟机配置静态映射:在Win10宿主机的C:\Windows\System32\drivers\etc\hosts文件中,手动写入Ubuntu虚拟机的IP与对应主机名的记录,让解析直接命中本地静态规则,完全绕开LLMNR多播链路的不稳定问题。
  • 升级.NET运行时版本:.NET Core 3.1已停止官方支持,后续.NET 5及以上版本已修复原生DNS解析API的封装缺陷,高频调用下的稳定性大幅提升。

内容的提问来源于stack exchange,提问作者berliner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 02:24:06