0

我想开发一个程序,而不是特定于语言的程序,它可以将任何连接重定向到另一个连接,比如代理服务器,但适用于所有连接。语言并不重要,但是有没有办法在不修改原始 Windows api 等的情况下做到这一点?我将在 java 中尝试这个,但我可以使用 JNI 导入 C 和 C++ 代码。另外,mac/linux呢?

4

2 回答 2

2

您当然应该考虑/评估使用 TCP/UDP 拼接。它是一种众所周知的构建代理的机制,并且在将数据从一个连接复制到另一个连接方面相当有效。

网址: http: //linux.die.net/man/2/splice

于 2013-08-12T02:46:51.543 回答
0

Java 是错误的语言来尝试执行此操作。即使可能(例如在 Windows 上),实际工作也需要使用外部实用程序或使用本地库调用来完成。

尝试对多个操作系统执行此操作会使这变得更加困难。实现机制必然不同。


我不知道您将如何在 Windows 中执行此操作,但在现代 Linux 系统上,您可以使用“iptables”来启用和配置操作系统内核中的网络数据包处理。这需要 root 权限、对网络协议方式的良好理解以及关心......因为很容易将您的网络“砖化”到您需要控制台级访问权限才能恢复的程度。

(如果您使用的是操作系统级别的虚拟化,它可能会变得特别复杂......)

FWIW - 可以在 Mac OS/X 上安装和使用“iptables”端口......认为它显然不受 Apple 支持。


另一方面,如果您只是想让 Java 应用程序通过某种代理来引导它自己的SocketFactory所有传出网络连接,那么您应该能够通过配置自定义实现来做到这一点。

于 2013-08-12T02:05:02.123 回答