【发布时间】:2021-11-01 13:38:10
【问题描述】:
我正在尝试将 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 是我希望收到的。
是否有一种简单、无错误的内置函数来实现这一点,还是我必须编写一个字符串操作函数?
编辑:在阅读了有用的 cmets 之后,我意识到这不是 .Parse() -Problem 而是 .toString() -Problem
我找到了适合我的解决方案。如果您找到更好的解决方案,请告诉我!
【问题讨论】:
-
我很想知道您认为一旦字符串被解析为 IPAddress 的区别。为什么要担心强制转换回字符串会发生什么?
-
根据rfc4291 2.5.5.2. IPv4-Mapped IPv6 Address,它被正确解释为 IPv4 映射到 IPv6 地址。
-
好问题。我需要用于 HTTP 的 System.Net.IPAddress 对象 - 功能(不相关)。在代码的另一部分,我只能访问 IPAddress。我需要将其转换为十六进制字符串以进行比较和数据库存储。这是代码出错的部分,因为 IPAddress.ToString() 返回到 IPv4 映射的 IPv6 格式
标签: c# ip-address