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();
}
如果您找到更好的解决方案,请告诉我!
我正在尝试将 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();
}
如果您找到更好的解决方案,请告诉我!