偽IP如何實現與客戶機進行TCP通訊?

軟件環境

WinXP SP2

截取數據包的Ndis5.0驅動已經寫好。 在用戶層,能夠修改驅動發來的數據包的IP地址,客戶機也能接收到該數據包。

我這個軟件是用于模擬多客戶機與服務器連接實現數據傳輸的測試軟件。

硬件環境

(33.33.33.33(假定是這個))         |—— 客戶機2 (192.168.1.105)
客戶機1——路由 (192.168.1.1)——|
                   |—— 發送機 (192.168.1.100) (偽裝 99.99.99.99)

現在需要發送機偽裝IP 99.99.99.99 與兩客戶機進行TCP通信

在客戶機2安裝的Ethereal 檢測到發送機發來的IP為 99.99.99.99 數據包,物理地址(MAC)也為發送機的物理地址。

但 問題是,當客戶機2接收到第一次TCP握手包后,它返回的響應包雖然目的IP地址仍然是99.99.99.99,但物理地址卻是網關 192.168.1.1的物理地址!我再查看客戶機2的數據包,發現在它接收到發送機發送的握手包時,它先發送ARP數據包查詢了網關 (192.168.1.1)的物理地址再發到網關。也就是說,當客戶機發現接收的數據包IP與自己不在同一子域則自動把數據包發往網關,但現在問題是由于 發送的物理地址改變了,網關只能查詢正確的99.99.99.99的物理地址,那這時候,數據包也就不能再返回偽裝的發送機上了。于是TCP連接被逼中 斷。

而且,兩客戶機均開啟了防火牆,不能使用ICMP實現數據包路徑轉移。

我嘗試發送ARP包去修改客戶機2的ARP緩沖,但沒用,不同一子域的IP地址不會受到緩沖,結果IP包依然發往網關。

有何方法可以實現發送機與兩客戶機用偽IP通信?鬱悶中……

Comments !