2014-11-24 128 views
0

我目前正在編寫一個Java應用程序,我正在運行一臺主服務器和一臺備份服務器(使用虛擬機)。爲了讓備份服務器作爲主服務器(如果主服務器出現故障)在對客戶端完全透明的情況下接管,我需要在主服務器和備份服務器上運行相同的應用程序,並且兩者都必須具有相同的狀態。即時修改TCP數據包

爲此,我必須將備份與主節點同步,以便它從客戶端收到相同的數據包序列併發送相同的(抑制)回覆。爲此,我需要獲得備份的初始TCP序列號以匹配主要的初始序列號。

爲了實現這一點,我想攔截進出備份服務器的數據包,並修改其TCP報頭中的序列號,使其與主數據庫的序列號匹配。因此,我需要的是一個應用程序 -

  • 讓我在飛行
  • 讓我修改它們,然後將它們轉發到其原始目的地
  • 確保原始未修改包被丟棄攔截TCP數據包
  • 可以嵌入Java應用程序的東西是一個巨大的加號,但這不是一個主要的要求

有沒有什麼辦法可以實現這一點?

+0

你不能在Java中使用我所知道的任何包來做到這一點。每個人都會建議JPcap,但是這隻能讓你捕獲數據包,而不是修改它們。 – EJP 2014-11-24 00:35:35

+0

@EJP啊,這是不幸的,是否有一個你知道哪些可以完成這項工作的另一種語言包?如果需要的話,我願意使用Java以外的東西。 – 2014-11-24 00:41:04

+0

有一個C庫的名字我誤解了它。可用於大多數主要操作系統的端口。我認爲這可能是[這裏]提到的'LibNet'項目(http://www.tcpdump.org/related.html)。幾年前,我在JPcap上做了一些工作,我認爲這是我注意到這一點的地方。 – EJP 2014-11-24 01:04:05

回答

0

爲了誰是面臨同樣的問題的人,我終於成功地做到這一點使用ettercap - http://ettercap.github.io/ettercap/

更具體地說,我使用的ARP中毒模式,以數據包攔截,並從服務器和使用自定義ettercap插件以適當修改它們