You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net调用Ping类访问IPv6地址超时 控制台同地址Ping正常

问题根因

::ffff:192.168.178.20是IPv4映射格式的IPv6地址,.NET内置Ping类和Windows系统自带ping.exe对这类地址的处理逻辑存在差异:

  • 系统ping.exe会自动识别地址中内嵌的IPv4段,直接走IPv4协议栈发送ICMPv4请求,因此可以正常收到目标主机回应。
  • .NET的Ping类默认不会做这类自动转换,会将该地址识别为纯IPv6地址,走IPv6协议栈发送ICMPv6请求。而局域网内的目标主机通常未配置对应IPv6地址、或局域网路由不转发该类ICMPv6数据包,最终触发5秒超时,始终返回"Bad"。
修复方案

解析IP地址后增加判断,如果是IPv4映射的IPv6地址,先转换为原生IPv4地址再发起Ping请求即可,参考实现:

var ipString = "::ffff:192.168.178.20";

if (IPAddress.TryParse(ipString, out var ipaddr)){
    // 转换IPv4映射的IPv6地址为原生IPv4地址
    if (ipaddr.IsIPv4MappedToIPv6)
    {
        ipaddr = ipaddr.MapToIPv4();
    }
    var reply = new Ping().Send(ipaddr, 5000);
    return reply.Status == IPStatus.Success ? "Good":"Bad";
}

如果使用的是未提供IsIPv4MappedToIPv6属性的老旧.NET Framework版本,可以手动判断地址格式:地址族为InterNetworkV6时,检查地址前10字节全为0、第11-12字节为0xffff,取最后4字节即可解析出内嵌的IPv4地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:24:25