我想要所有网络流量(HTTP、HTTPS 和 DNS - 还有其他的吗?)通过本地应用程序进入服务器应用程序,然后从那里进入互联网。我怎样才能做到这一点?
我已经编写了一个异步 TCP 服务器,并且我知道使用 SocketAsyncEventArgs 在 C# 中进行套接字异步编程(我不是只有一个项目的大师,但我想我可以理解一些基础知识)。
做到这一点的唯一方法是编写一个 Windows 网络驱动程序——你不能从用户空间做到这一点。这就是 VPN 的工作方式。
有一些用户级隧道,您可以开发该隧道单个连接,但它们需要用户配置他们的应用程序以首先使用它,因此您不能单方面重定向所有网络活动。
根据您的问题,我猜您对 Winsock 内部或编写内核网络驱动程序不太熟悉,所以现在我要说我认为这超出了您目前的能力水平。
但是,如果您愿意采用一些不纯的方法,您可以轻松实现 SOCKS 代理,但这需要配置浏览器以使用您的代理服务器 - 至少这样您将隧道 HTTP 和 HTTPS,但是我不确定浏览器是否将 SOCKS 服务器用于 DNS,或者是否使用操作系统提供的 DNS 功能。
像@Dai 建议的那样,使用SOCKS代理。它在传输层之上运行,因此可以将 SOCKS 服务器配置为服务于在典型 TCP/UDP 上运行的任何应用程序协议。
这正是 TOR 为屏蔽所有流量所做的,而不仅仅是 HTTP。