System.Net.IPAddress.Parse() 将(不需要的)IPv6 字符串转换为 IPv4 映射到 IPv6 地址

System.Net.IPAddress.Parse() converts (unwanted) IPv6 string to IPv4-mapped-to-IPv6-address

我正在尝试将 ip 地址字符串解析为 System.Net.IPAddress。

var ip = IPAddress.Parse(iPAddressDefinition);

字符串可以是每个 IPv4 或每个 IPv6 地址,即 0.0.0.0 - 255.255.255.255 和 :: - ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。解析在 99% 的时间内都按预期工作。

然而,如果第三个(从右边开始)八位字节是 ffff,例如::ffff:0808:0808,Parse() 函数将字符串解释为 IPv4 映射到 IPv6 地址,导致稍后代码中出现错误。

上面示例的结果是 ::ffff.8.8.8.8,但 ::ffff:808:808 或 ::ffff:0808:0808 是我希望收到的结果。

是否有一种简单、无错误的内置函数方法来实现此目的,或者我是否必须编写一个字符串操作函数?

编辑:阅读有用的评论后,我意识到,这不是 .Parse() -问题,而是 .toString() - 问题

我找到了适合我的解决方案。如果您找到更好的解决方案,请告诉我!

阅读有用的评论后,我意识到这不是 .Parse() 问题,而是 .toString() 问题。

                var ip = IPAddress.Parse(iPAddressDefinition);
                if (ip.IsIPv4MappedToIPv6)
                {
                    var index = iPAddressDefinition.IndexOf("ffff");
                    strIp = string.Concat("::", iPAddressDefinition[index..]);
                }
                else
                {
                    strIp = ip.ToString();
                }

如果您找到更好的解决方案,请告诉我!