# C# 以一种不一样的方式让tun网卡支持IPV4+IPV6双栈组网

假设已经支持IPV4,从网卡读取到IP包后,能够读取其中的IP,根据IP知道要将数据包发给组网中的哪个客户端,将数据包写入对方网卡,已经能够正常通信

这其中,IPV4每个IP和客户端是一一对应的,如此,我们才能从IPV4包中读取到IP后,知道要发送给哪个客户端,假设是

C#
ConcurrentDictionary<uint,string> ipv4Dic = new ConcurrentDictionary<uint,string>()

那么,现在我们要支持IPV6,我们还需要需要一个 ipv6Dic 吗,不需要,我们只需要将IPV44个字节,设置为IPV6的最后4字节即可,以windows为例

C#
//网卡ipv4
IPAddress ipv4 = IPAddress.Parse("10.18.18.2");
string commandIpv4 = $"netsh interface ipv4 add address \"网卡\" address=\"{ipv4}\"";

//ipv6
byte[] ipv6 = IPAddress.Parse("fe80::1818:1818:1818:1818").GetAddressBytes();
ipv4 .GetAddressBytes().CopyTo(ipv6, ipv6.Length - 4);
string commandIpv6 = $"netsh interface ipv4 add address \"网卡\" address=\"{new IPAddress(ipv6)}\"";

如此一来,从网卡中读取到IPV6包,获取目标IP的最后4字节,再去和ipv4Dic匹配即可