0

我正在尝试重定向一些流出的流量,所以当被问到 1.1.1.1:2222 本地机器时转到 2.2.2.2:3333

使用 java 完成此任务的最简单方法是什么?

此致

windows上的hosts文件不是!一个选项

编辑: ip 1.1.1.1:2222 是一个外部 IP(我不拥有的服务器)。因此我无法创建一个简单的套接字服务器来重定向流量。我必须以某种方式更改数据包方向

另请注意,这是我要重定向的OUTGOING部分。一个简单的例子是,如果我要求 www.google.dk 我得到 facebook

这必须从java中完成。

4

2 回答 2

1

你不能在 Java 中做这种事情。实际上,您通常根本无法在用户空间应用程序中执行此操作。

如果您使用的是 Linux 平台,您可能会配置iptables为拦截指定类型的发往特定 IP 地址/端口的传出数据包,并重写目标 IP 地址。但是,这实际上是系统/网络管理问题,而不是编程问题。

正如您可以想象的那样,如果非特权应用程序可能导致流量重新路由,您可以做各种令人讨厌的事情。您需要 Linux 上的 root 权限才能更改 iptables 配置。


这必须从java中完成。

好吧,除非您询问应用程序重定向自己的请求,否则它不能在 Java 中/从 Java 中完成。

(在特殊情况下,您可以通过实现一个自定义套接字工厂来执行此操作,该工厂打开连接到与您的应用程序代码的更高级别所要求的不同的地方。但是,我认为这不是您要问的为了。)

于 2012-05-04T11:10:20.930 回答
0

我认为它可以很容易地用套接字实现,基本上:

  1. 在 1.1.1.1:2222 上打开一个 ServerSocket
  2. 打开一个到 2.2.2.2:3333 的套接字
  3. 将第一个的输出流重定向到第二个的输入流,反之亦然

你有一个例子here

于 2012-05-04T10:48:36.093 回答