只想为一个应用程序实施 ***
Posted
技术标签:
【中文标题】只想为一个应用程序实施 ***【英文标题】:Want to implement a *** for just one application 【发布时间】:2011-06-25 21:37:57 【问题描述】:我希望为我的软件添加对 *** 的支持,
我知道 PPTP 和 Open*** ,两者进行系统范围的绑定,安装一个 TAP 驱动程序,以便所有应用程序将它们的流量路由到那里。
如何仅为我的应用程序实现 *** 支持?有任何库、示例、提示或方法吗?
我的软件实际上是用 C++ /MFC 制作的。使用标准 CAsyncSocket。
【问题讨论】:
如果只针对一个应用程序,为什么不使用 SSL/TLS? 不能是 SSL,因为我需要转发端口。 *** 将用于 p2p 软件的匿名化。 【参考方案1】:将传入连接转发到您的应用程序相对容易:
stunnel 允许您通过 SSL 隧道将流量转发到特定端口。不过,它要求您在两端都运行它。
大多数不错的SSH 客户端,例如OpenSSH 或PuTTY 也支持端口转发,其额外优势是任何远程SSH 服务器通常可以充当隧道的另一端而无需任何修改。
您还可以使用 Open*** 和其他 *** 解决方案,但这需要将特定的转发规则添加到远程服务器。
但是,转发传出 连接在不修改您的应用程序的情况下会比较棘手。正确的做法是实现SOCKS 协议,最好是SOCKS5。或者,您可以使用外部应用程序(例如 FreeCap)来重定向来自您的应用程序的任何连接。
完成此操作后,您可以将连接转发到任何 SOCKS 服务器。例如,大多数 SSH 客户端允许您 use the SOCKS protocol 通过远程服务器路由传出连接。
附带说明,Open*** 服务器不一定会成为您所有流量的默认网关。有些确实将这样的路由表条目推送到客户端,但它可以更改。在我自己的 Open*** 设置中,我只使用 *** 来访问专用网络,而不是通过它路由所有内容。
如果您可以强制您的应用程序将所有传出套接字绑定到一个或多个特定端口,则可以使用系统上的 IP 过滤规则通过 *** 路由来自这些端口的任何连接。 p>
编辑:
隧道 UDP 数据包有点困难。通常,您需要在远程服务器和本地客户端上都有一个代理进程,该进程将通过持久 TCP 连接隧道传入和传出连接。
您最好的选择是在您的应用程序中实现完整的 SOCKS5 客户端,包括用于 UDP 数据包的 UDP-ASSOCIATE 命令。然后你必须找到一个支持隧道的 SOCKS5 代理。
我偶尔会使用Delegate,这似乎是代理的瑞士小刀。据我所知,它在 SOCKS5 实现中支持 UDP-ASSOCIATE 命令,还支持通过 TCP 连接连接两个 Delegate 进程。它也可用于 Linux 和 Windows。我不记得它是否也可以加密那个 TCP 连接,但是如果你需要的话,你总是可以通过 stunnel 或 SSH 来隧道那个连接。
但是,如果您在远程 *** 服务器上拥有系统管理员权限,则可能会进行更简单的设置:
让您的 P2P 应用程序将其传出 UDP 套接字绑定到客户端 *** 接口。许多人需要为该接口设置辅助默认路由。这样,您的应用程序的传出数据包将通过远程服务器。
让远程服务器通过 *** 连接将传入的 UDP 数据包转发给特定端口。
这应该是一个更简单的设置,但如果您真的关心匿名性,您可能有兴趣确保您的 P2P 应用程序不会泄漏 DNS 或其他可跟踪的请求。
【讨论】:
使用 ssh/Putty 可能是最简单的解决方案。如果必须不惜一切代价实现端口转发,您可以查看该代码。 非常好的答案,但它是一个 p2p ,它使用 TCP 和 UDP 端口。 Socks 对 UDP 的支持实际上是不存在的。 socks5 中有一个用于 UDP 绑定的操作码,但没有人实现它。另请注意,我的软件在 Windows 上运行。服务器可以在 Linux 或 Windows 中。【参考方案2】:在您的应用中加入 SSH 连接或使用 SSL。您必须使用协议/服务而不是 *** 技术。祝你好运!
【讨论】:
【参考方案3】:我认为您只需要 SSL:http://www.openssl.org/
Open*** 基于 SSL - 但它是一个完整的 ***。
问题是你需要什么?如果您需要加密(应用程序专用连接)而不是 ***(虚拟专用网络),请选择 ssl。
提示可以在这里找到:
Adding SSL support to existing TCP & UDP code?
http://sctp.fh-muenster.de/dtls-samples.html
http://fixunix.com/openssl/152877-ssl-udp-traffic.html
【讨论】:
以上是关于只想为一个应用程序实施 ***的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Web 应用程序中实现 REST。我想为我的网站制作一个休息 API?
为什么Android开发一定要进大厂?这年终奖太香了,我只想为他们卖命