在通过 ipv4 的传入连接上,IPAddress 使用 ipv6 表示法,例如 ::ffff:1.2.3.4
我想将这些地址与我从其他地方获得的 IPAddress 进行比较,该代码采用 ipv4 表示法:1.2.3.4

通过符号,我的意思是 ipv4.GetAddressBytes() 返回 4 个字节,而 ipv6.GetAddressBytes() 返回 16 个字节。

有没有一种简单的方法可以将 ipv4 IPAddress 转换为 ipv6 符号?

我想我知道如何逐个字节地完成它,但我可能会错过一些东西,并且宁愿使用现有的函数(如果有的话)。

最佳答案

将您的 IP 地址实例化为 System.Net.IPAddress 的实例。看看以下方法:

  • IPAddress.Equals()
  • IPAddress.MapToIPv4()
  • IPAddress.MapToIPv6()

  • 您可能希望为特殊地址添加特殊处理(例如 TCP/IP 环回适配器:这是一个单一的 IPv6 地址, ::1 ,而对于 IPv4,即使为此目的最常用的地址是 127.0.0.1 ,IETF为此目的保留了 整个 127/8 块(包含 127.0.0.0127.255.255.255 在内)。如何确定相等性(甚至等价性)是有争议的。

    由于 IPv4 和 IPv6 是完全不同且独立的寻址方案,因此人们可能会合理地争辩说,确定等效性的唯一正确方法是它们都映射到同一端点(MAC 地址/网络适配器)。

    关于c# - 比较 ipv6 表示法中的 ipv4 地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16618810/

    10-13 06:48