重定向网络流量

时间:2012-05-04 10:41:51

标签: java networking

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

使用java实现这一目标的最简单方法是什么?

祝你好运

Windows上的

主机文件不是!一个选项

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

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

这必须从java。

完成

2 个答案:

答案 0 :(得分:1)

你不能在Java中做这种事情。实际上,你通常不能在用户空间应用程序中做这件事。

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

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


  

这必须从java。

完成

好吧,除非您询问应用程序重定向自己的请求,否则无法用Java / Java完成。

(在特殊情况下,您可以通过实现一个自定义套接字工厂来实现这一点,该工厂打开连接到应用程序代码的更高级别要求的不同位置。但是,我不认为这是什么你要的是。)

答案 1 :(得分:0)

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

  1. 在1.1.1.1:2222上打开ServerSocket
  2. 打开Socket到2.2.2.2:3333
  3. 将第一个的outputStream重定向到第二个的输入流,反之亦然
  4. 您有一个示例here