【问题标题】:Redirecting network traffic重定向网络流量
【发布时间】:2012-05-04 10:41:50
【问题描述】:

我正在尝试重定向一些流出的流量,所以当被要求输入 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 中完成。

【问题讨论】:

  • 你这样做的目的是什么?
  • 我认为这个问题与编程无关。您应该调整网络软件,具体工作取决于具体要求。例如,您的目标 IP 有 DNS 名称?您对某些特定于协议(例如 http)的重定向感兴趣吗?如果服务器不在您的控制之下,为什么还要指定端口?
  • 这是相关的,因为根据您的回复,实际服务器不属于您,所以您听起来好像您正在做的事情并不真正意味着,甚至可能是非法的,例如网络钓鱼......

标签: java networking


【解决方案1】:

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

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

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


这必须从 java 中完成。

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

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

【讨论】:

  • 根据他的问题,我认为它在 Windows 上
【解决方案2】:

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

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

你有一个例子here

【讨论】:

  • 更新问题。你似乎不明白我在哪里 :) 虽然感谢你的尝试 ;)
  • 那你不能做那样的事,感谢上帝。你必须以某种方式处于通信的中间......想象一下互联网上的混乱,如果你可以重定向你不拥有的服务器的所有流量......
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2020-11-21
  • 1970-01-01
相关资源
最近更新 更多