2013-05-09 89 views
2

我正在尋找建立一個簡單的服務器來代理TCP連接在我的網絡的網關(沒有惡意的意圖),但TCP握手失敗。欺騙TCP服務器握手失敗

使用netfilter,我設法改變了傳入TCP數據包的IP和端口,以便它們被轉移到我的應用程序,並且在返回時更改它們以及更新所有校驗和。

我的服務器當前正在發送SYN-ACK,該SYN-ACK到達預期的主機,但ACK從不會生成。根據wireshark的數據包形成良好沒有校驗和的問題,SYN和ACK值似乎匹配。

這裏是TCP轉儲輸出

握手成功沒有我的代理

16:21:08.887938 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [S], seq 4201716329,  win 14000, options [mss 1400,sackOK,TS val 727682 ecr 0,nop,wscale 2], length 0 
16:21:08.889870 IP 192.168.2.56.12105 > 192.168.1.1.37513: Flags [S.], seq 34328406, ack 4201716330, win 14480, options [mss 1460,sackOK,TS val 1879286956 ecr 727682,nop,wscale 5], length 0 
16:21:08.891751 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [.], ack 1, win 3500, options [nop,nop,TS val 727683 ecr 1879286956], length 0 

失敗的握手與我的代理

16:21:49.767611 IP 192.168.1.1.37514 > 192.168.2.56.12105: Flags [S], seq 2057472079, win 14000, options [mss 1400,sackOK,TS val 731770 ecr 0,nop,wscale 2], length 0 
16:21:49.768522 IP 192.168.2.56.12105 > 192.168.1.1.37514: Flags [S.], seq 1201001621, ack 2057472080, win 14480, options [mss 1460,sackOK,TS val 7621570 ecr 731770,nop,wscale 4], length 0 

這在客戶端和服務器後剛剛重新發送ACK/SYN -ACK。

有什麼明顯的我失蹤了嗎?或者是否有人對我應該如何開始調試問題有任何建議?

+0

你確定SYN-ACK數據包到達客戶端,而不是被過濾嗎?你可以在客戶端上運行tcpdump來驗證它正在接收數據包嗎? – 2013-05-09 17:27:44

+0

對不起,我沒有指定,提供的轉儲來自客戶端。 – DarkRyuu 2013-05-09 17:29:27

+0

嘗試從服務器端添加轉儲也。客戶端,服務器,代理的IP是什麼?數據包如何被代理攔截? – Nikolai 2013-09-13 14:31:21

回答

0

這取決於你如何改變數據包。您使用iptables NAT來更改IP地址和端口號?

在你的情況,客戶端丟棄數據包,因爲它認爲這不是正確的數據包,即使ip,端口,ACK是正確的。