首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟网络连接

虚拟网络连接
EN

Stack Overflow用户
提问于 2009-11-27 22:21:47
回答 2查看 801关注 0票数 2

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

有没有可能通过编程的方式创建一个呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-05 23:42:34

听起来您正在寻找Tap-Win32驱动程序。它是Windows上的OpenVPN用来创建您所看到的虚拟界面的驱动程序,实际上也是the OpenVPN package的一部分。这个子系统也可以在许多*nixes上使用。

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

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

我在Windows上没有这方面的经验,所以我在这里快速浏览一下源代码。OpenVPN在tun.c函数open_tun中完成了这些步骤中的大部分。你会发现这个函数有多个定义,但是它们是针对不同OSes的#ifdef'd (所以搜索CreateFile)。这似乎是在Windows上运行的基本方式:

  1. 在启动任何运行TAP接口的应用程序之前,会预先创建一个或多个虚拟接口(由安装程序?)。这些接口启动disconnected.
  2. Your应用程序,并在"\.\Global\GUID.tap“上执行特殊的CreateFile调用。其中,GUID替换为描述特定虚拟接口的GUID。可以在OpenVPN源代码的"tap-win32\common.h“中定义为ADAPTER_KEY的注册表项中迭代虚拟接口。
  3. 您的应用程序可能会执行某些DeviceIoControl调用。OpenVPN经常使用它来获取驱动程序版本,获取MTU,设置TUN模式,以及其他杂乱的东西。
  4. 此时,界面可能在Windows中显示为已连接,您甚至可能已经在读取从Windows本身接收到的DHCP请求。为了使用Windows networking API的其他部分配置接口,OpenVPN经历了大量的麻烦,但这并不是特定于TAP驱动程序的。

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

票数 3
EN

Stack Overflow用户

发布于 2009-12-01 10:29:45

MSDN Ras Dial function

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

在该页面中:

除了使用点对点协议的传统远程访问连接之外,远程访问服务(RAS)还支持虚拟专用网络(

)连接。在VPN连接中,VPN数据包被封装在IP数据包中,并通过IP网络(例如Internet )发送。因此,需要访问IP网络才能建立VPN连接。如果客户端计算机具有到IP网络的始终在线连接,例如到IP局域网的连接,则客户端可以使用对RasDial函数的单个调用来建立虚拟专用网连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1809054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档