我可以看到很多程序,如 openvpn 和 Teamviewer,它们的 VPN 连接在 Windows 上创建了一个虚拟网络连接。我想为自己创建一个用于测试目的。
是否可以通过编程方式创建一个?
我可以看到很多程序,如 openvpn 和 Teamviewer,它们的 VPN 连接在 Windows 上创建了一个虚拟网络连接。我想为自己创建一个用于测试目的。
是否可以通过编程方式创建一个?
听起来您正在寻找 Tap-Win32 驱动程序。它是 Windows 上的 OpenVPN 驱动程序,用于创建您所看到的虚拟界面,实际上是OpenVPN 软件包的一部分。这个子系统也可用于许多 *nixes。
此 TAP 驱动程序的接口在所有操作系统上大致相同。您打开一个特殊文件,并将原始以太网帧写入此文件。然后驱动程序将这些帧插入到虚拟接口中。相反,在虚拟接口上传输的任何数据包都可以作为原始以太网帧从特殊文件中读取。
大多数实现还有一个 TUN 模式,它在第 3 层而不是第 2 层运行。因此,您将读取原始 IP、IPv6 等数据包而不是以太网帧。
我在 Windows 上没有这方面的经验,所以我在这里快速浏览一下源代码。OpenVPN 在 tun.c 函数 open_tun 中完成了大部分这些步骤。您会发现此函数的多个定义,但它们是针对不同操作系统的#ifdef(因此请搜索 CreateFile)。这似乎在 Windows 上运行的基本方式是:
因此,虽然 API 实际上只是一个特殊文件,因此相当简单,但实际管理接口还有很多工作要做。但如果你只是为了测试,这可能就足够了。然后,您可以在 Windows 中手动配置您的测试界面。
这可能是朝着正确方向迈出的一步?
从页面:
除了使用点对点协议 (PPP) 的传统远程访问连接之外,远程访问服务 (RAS) 还支持虚拟专用网络 (VPN) 连接。在 VPN 连接中,VPN 数据包被封装在 IP 数据包中并通过 IP 网络(例如 Internet)发送。因此,访问 IP 网络是建立 VPN 连接的必要条件。如果客户端计算机与 IP 网络具有始终在线的连接,例如与 IP LAN 的连接,则客户端可以使用对 RasDial 函数的单个调用来建立 VPN 连接。