跳到主要内容

98.101、单独使用应用层SNAT

说明

1、使用

有效解决win7/8,win server2008/2012无法使用NetNat的问题

如果你使用的是linker.tun类库,已经集成应用层SNAT,使用LinkerTunDeviceAdapter.SetSystemNat使用系统NAT和LinkerTunDeviceAdapter.SetAppNat使用应用层SNAT即可

windivert下载抓包驱动,放置合适的WinDivert.dllWinDivert.sys到程序根目录,然后 nuget 安装 linker.snat,然后编写代码


internal class Program
{
static void Main(string[] args)
{
//初始化
LinkerSrcNat linkerSrcNat = new LinkerSrcNat();
bool result = linkerSrcNat.Setup(new SetupInfo{
//虚拟网卡IP
Src = IPAddress.Parse("10.18.18.2"),
//仅访问192.168.1.0/24时NAT
Dsts = new AddrInfo[]{
new AddrInfo(IPAddress.Parse("192.168.1.0"),24)
},
//本机局域网IP,用于替换为源IP
InterfaceIp = IPAddress.Parse("192.168.1.2")
},out string error);

//在将TCP/IP数据包写入网卡前增加一个操作
if(linkerSrcNat.Inject(packet) == false)
{
//不需要NAT或者NAT失败,这里可以继续把数据包写入虚拟网卡
}

//关闭
linkerSrcNat.Shutdown();
Console.ReadLine();
}
}

1、原理图

Docusaurus Plushie