2012-05-04 193 views
0

我想重定向一些流量走出去,所以當問1.1.1.1:2222本地機器上,而不是去2.2.2.2:3333重定向網絡流量

請告訴我最簡單的方法的使用做到這一點的java?

致以問候

在Windows上的主機文件不是!一個選項

編輯: 該ip 1.1.1.1:2222是一個extenal IP(我不擁有的服務器)。因此我無法創建一個簡單的套接字服務器來重定向流量。我必須以某種方式更改數據包方向

另請注意,它是OUTGOING我想要重定向的部分。一個簡單的例子是,如果我要求www.google.dk我得到Facebook的

這必須從Java實現。

+2

什麼是你這樣做的目的是什麼? – fmucar

+1

這與此有關嗎? –

+0

我不認爲這個問題與編程有關。您應該調整網絡軟件,並且工作取決於具體要求。例如,您的目標IP具有DNS名稱?您對某些協議特定(例如http)重定向感興趣嗎?如果服務器不受您的控制,爲什麼要指定端口? – Raffaele

回答

0

我認爲它可以與插槽可以輕鬆實現,基本上是:

  1. 公開賽1.1.1.1:2222
  2. 打開一個Socket一個ServerSocket來2.2.2.2:3333
  3. 重定向的的OutputStream第一至第二的InputStream和反之亦然

你有一個例子here

+0

更新的問題。你似乎不明白我在哪裏:)雖然感謝嘗試;) –

+1

然後,你不能做那樣的事情,並感謝上帝。你必須以某種方式處於溝通的中間...想象一下,如果你可以重定向所有你不屬於自己的服務器的流量,那麼互聯網上的混亂...... –

1

你不能在Java中做這種事情。事實上,你根本不能在用戶空間應用程序中完成這件事。

如果您正在使用Linux平臺,您可能會配置iptables來攔截指定類型的發往特定IP地址/端口的傳出數據包,並重寫目標IP地址。但是,這實際上是一個系統/網絡管理問題,而不是編程問題。

正如你可以想像,有討厭的事情,如果一個非特權應用程序可能會導致流量進行重新路由,你可以做各種各樣。您需要在Linux上擁有root權限才能更改iptables配置。


這必須從Java實現。

好吧,除非你是問有關應用程序重定向自己的請求,它不能用Java /從Java實現。 (在特殊情況下,你可以通過實現一個自定義套接字工廠來實現這個功能,該套接字工廠可以打開連接到不同的地方,以獲得更高級別的應用程序代碼所要求的內容。但是,我不認爲這是你所要求的。)

+0

基於他的問題,我認爲它在Windows上 – Raffaele

+0

@Raffaele - 我不知道如何在Windows上做這種事情... –