如何使用重写的OpenVPN tun/tap dirver在Windows中修改/重定向数据包

如何使用重写的OpenVPN tun/tap dirver在Windows中修改/重定向数据包,windows,redirect,packet,openvpn,Windows,Redirect,Packet,Openvpn,我想制作一个透明的链代理 使用重定向服务器和用Qt for Windows编写的链代理客户端。 我试过ndis+tdi,但对我来说太复杂了。 我已经开始破解openVPN代码。 因此,任务是启动虚拟tap设备,即使不需要OpenVPN连接,并将数据包重定向到某个addr:port,我的重定向服务器将绑定该端口。 也许实现新的插件功能更好…您可以使用OpenVPN的TUN/TAP驱动程序(“TAP-Win32”)来实现由软件支持的网络设备。我不知道你所说的“重写OpenVPN tun/tap驱动程

我想制作一个透明的链代理 使用重定向服务器和用Qt for Windows编写的链代理客户端。 我试过ndis+tdi,但对我来说太复杂了。 我已经开始破解openVPN代码。 因此,任务是启动虚拟tap设备,即使不需要OpenVPN连接,并将数据包重定向到某个addr:port,我的重定向服务器将绑定该端口。
也许实现新的插件功能更好…

您可以使用OpenVPN的TUN/TAP驱动程序(“TAP-Win32”)来实现由软件支持的网络设备。我不知道你所说的“重写OpenVPN tun/tap驱动程序”是什么意思;您不需要修改任何现有代码,只需编写自己的程序,打开TAP-Win32并读取和写入帧/数据包。您不需要OpenVPN的任何其他部分,只需点击Win32即可

但是,如果使用TUN/TAP驱动程序,则必须处理单个帧/数据包。如果只重定向TCP(即重定向连接而不是数据包),那么让重定向程序只提供本地SOCKS服务器可能会很有用。使用袜子,你可以使用连接而不是数据包。如果给定的网络程序支持SOCKS,您可以简单地告诉它使用SOCKS服务器

另一方面,如果您希望能够为所有应用程序重定向,而不仅仅是那些理解SOCKS的应用程序(或者您不希望为每个应用程序配置SOCKS),则可以使用一个程序,该程序允许您通过SOCKS服务器转发原始TCP连接(在数据包级别)。看我的节目

一旦有程序运行TAP-Win32设备,请更新路由表以将数据包路由到其中。您可能希望将其设置为默认路由,覆盖所有以前的默认路由。但是请注意,路由表也适用于重定向程序本身,因此您需要为重定向程序所连接的主机添加特定路由,否则它们将返回到TAP设备。tun2socks页面说明了在使用SSH转发时如何做到这一点

更新:Tun2Sock只处理TUN设备,只转发所有传入连接。它不能决定你想转发什么。即使它有一些策略(比如端口号),它也无法利用这些信息做任何有用的事情。例如,如果它以拒绝数据包响应,那么连接将简单地失败——并且操作系统将不会寻找替代路由。(它可以将连接转发到不同的SOCKS服务器,但我认为这在您的情况下是没有用的)

您似乎需要的功能称为“策略路由”,它需要由您的操作系统提供。不幸的是,Windows似乎不提供策略路由。如果您真的需要它,您可能想改用Linux,它提供了比Windows更多的网络相关功能(策略路由就是其中之一)

或者,不使用Tun2Sock,一些用户空间socksification工具可能适合您。这些程序在启动特定应用程序时钩住与网络相关的系统调用,以便连接,例如通过SOCKS。如果这样的应用程序支持路由规则,它可能适合您的需要


这种Windows工具的一个例子是(商业软件),它声称支持“灵活的路由规则”。

您可以使用OpenVPN的TUN/TAP驱动程序(“TAP-Win32”)来实现由软件支持的网络设备。我不知道你所说的“重写OpenVPN tun/tap驱动程序”是什么意思;您不需要修改任何现有代码,只需编写自己的程序,打开TAP-Win32并读取和写入帧/数据包。您不需要OpenVPN的任何其他部分,只需点击Win32即可

但是,如果使用TUN/TAP驱动程序,则必须处理单个帧/数据包。如果只重定向TCP(即重定向连接而不是数据包),那么让重定向程序只提供本地SOCKS服务器可能会很有用。使用袜子,你可以使用连接而不是数据包。如果给定的网络程序支持SOCKS,您可以简单地告诉它使用SOCKS服务器

另一方面,如果您希望能够为所有应用程序重定向,而不仅仅是那些理解SOCKS的应用程序(或者您不希望为每个应用程序配置SOCKS),则可以使用一个程序,该程序允许您通过SOCKS服务器转发原始TCP连接(在数据包级别)。看我的节目

一旦有程序运行TAP-Win32设备,请更新路由表以将数据包路由到其中。您可能希望将其设置为默认路由,覆盖所有以前的默认路由。但是请注意,路由表也适用于重定向程序本身,因此您需要为重定向程序所连接的主机添加特定路由,否则它们将返回到TAP设备。tun2socks页面说明了在使用SSH转发时如何做到这一点

更新:Tun2Sock只处理TUN设备,只转发所有传入连接。它不能决定你想转发什么。即使它有一些策略(比如端口号),它也无法利用这些信息做任何有用的事情。例如,如果它以拒绝数据包响应,那么连接将简单地失败——并且操作系统将不会寻找替代路由。(它可以将连接转发到不同的SOCKS服务器,但我认为这在您的情况下是没有用的)

您似乎需要的功能称为“策略路由”,它需要由您的操作系统提供。不幸的是,Windows似乎不提供策略路由。如果您真的需要它,您可能想改用Linux,它提供了比Windows更多的网络相关功能(策略路由就是其中之一)

或者,不使用Tun2Sock,一些用户空间socksification工具可能适合您。这些是公共关系