3

在通过 ipv4 的传入连接上IPAddress,使用 ipv6 表示法,例如::ffff:1.2.3.4

我想将这些地址与IPAddress我从其他地方获得的以 ipv4 表示的地址进行比较:1.2.3.4

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

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

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

4

2 回答 2

3

将您的 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.0包括127.255.255.255在内)。如何确定平等(甚至等价)是有争议的。

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

于 2013-05-17T23:08:49.233 回答
0

从“源”中获取 IPv4 部分并与“目标”IPv4 进行比较,如下例所示

IPAddress ipv6 = null;
IPAddress ipv4 = null;
IPAddress testIp = null;

IPAddress.TryParse("::ffff:1.2.3.4", out ipv6);
IPAddress.TryParse("1.2.3.4", out ipv4);

string ipString = ipv6.ToString();
IPAddress.TryParse(ipString.Substring(ipString.LastIndexOf(":") + 1), out testIp);
// this will return false
Console.WriteLine("ipv4 == ipv6 : " + (ipv4.Equals(ipv6)).ToString());
// this will return true
Console.WriteLine("ipv4 == testIp : " + (ipv4.Equals(testIp)).ToString());
于 2013-05-17T22:55:28.663 回答