Networking 虚拟网络连接

Networking 虚拟网络连接,networking,network-programming,network-protocols,Networking,Network Programming,Network Protocols,我可以看到很多程序,比如openvpn和Teamviewer,它们的VPN连接在windows上创建了一个虚拟网络连接。我想为自己创建一个,用于测试目的 是否可以通过编程方式创建一个或多个 这可能是朝着正确方向迈出的一步 从页面: 除了使用点对点协议(PPP)的传统远程访问连接外,远程访问服务(RAS)还支持虚拟专用网络(VPN)连接。在VPN连接中,VPN数据包被封装在IP数据包中,并通过IP网络(如Internet)发送。因此,为了建立VPN连接,需要访问IP网络。如果客户端计算机与IP网

我可以看到很多程序,比如openvpn和Teamviewer,它们的VPN连接在windows上创建了一个虚拟网络连接。我想为自己创建一个,用于测试目的

是否可以通过编程方式创建一个或多个

这可能是朝着正确方向迈出的一步

从页面:

除了使用点对点协议(PPP)的传统远程访问连接外,远程访问服务(RAS)还支持虚拟专用网络(VPN)连接。在VPN连接中,VPN数据包被封装在IP数据包中,并通过IP网络(如Internet)发送。因此,为了建立VPN连接,需要访问IP网络。如果客户端计算机与IP网络(例如,与IP LAN的连接)保持常开连接,则客户端可以使用对Rasdail函数的单个调用来建立VPN连接


听起来您正在寻找Tap-Win32驱动程序。它是Windows上的OpenVPN用来创建您所看到的虚拟界面的驱动程序,事实上是它的一部分。该子系统在许多*数码机上也可用

该TAP驱动程序的接口在所有操作系统上大致相同。打开一个特殊文件,并将原始以太网帧写入该文件。然后,驱动程序将这些帧插入虚拟接口。相反,在虚拟接口上传输的任何数据包都可以作为原始以太网帧从特殊文件中读取

大多数实现还具有TUN模式,该模式在第3层而不是第2层运行。因此,您将读取原始IP、IPv6等数据包,而不是以太网帧

我在Windows上没有这方面的经验,所以我将在这里快速浏览源代码。OpenVPN在tun.c函数open_tun中完成了大部分这些步骤。您将找到此函数的多个定义,但它们是为不同的操作系统定义的(因此搜索CreateFile)。这似乎在Windows上运行的基本方式是:

  • 在启动任何操作TAP接口的应用程序之前,会预先创建一个或多个虚拟接口(由安装程序?)。这些接口一开始是断开的
  • 应用程序启动并在“\\.\Global\GUID.tap”上执行特殊的CreateFile调用。其中GUID由描述特定虚拟接口的GUID替换。虚拟接口可以在注册表项中迭代,该注册表项在OpenVPN源代码中的“tap-win32\common.h”中定义为ADAPTER_项
  • 应用程序可能会执行一些DeviceIoControl调用。OpenVPN多次使用它来获取驱动程序版本、获取MTU、设置TUN模式和其他杂项
  • 此时,界面可能显示为已连接在Windows中,您甚至可能正在读取已从Windows本身接收到的DHCP请求。OpenVPN使用Windows networking API的其他部分来配置接口,这是一个非常复杂的过程,但这并不特定于TAP驱动程序

  • 因此,虽然API实际上只是一个特殊的文件,因此相当简单,但实际管理接口还有很多工作要做。但如果你只是为了测试,这可能就足够了。然后,您可以在Windows中手动配置测试界面。

    我认为这不属于superuser.com。这是一个编程问题,因为它的驱动程序……问题非常清楚,如何以编程方式实现,所以我建议不要关闭此界面。您是否在寻找“现成的解决方案”或者是关于如何编码的答案?我需要答案而不是方向:P调用Rasdail函数链接中指定的参数将使windows为您拨号VPN?