天天看點

實作TCP透明代理(附下載下傳)

    本文所描述的TCP代理伺服器工作于網絡協定層次中的應用層,位于傳輸層之上。隻要是以TCP的方式為客戶提供服務的(包括我們的HTTP伺服器,HTTP底層走的仍然是TCP),我們都可以在真正的TCP伺服器前面增加代理伺服器。

  

實作TCP透明代理(附下載下傳)

當黑客攻擊應用層以下級别的協定棧,我們可以在真正的TCP伺服器前面部署N個代理伺服器,并将它們分布于不同的地方,這樣,當其中一個代理伺服器因為遭遇攻擊而挂掉時,受影響的隻是連接配接到這台代理伺服器的使用者,而其它的代理伺服器上的使用者仍然是正常被服務的,就像下面這樣:

實作TCP透明代理(附下載下傳)

TCP代理伺服器還有另外一個重要的作用,就是轉址機。比如,我們的機房位于廣州,而當北京的使用者來通路服務時,網絡延遲很大。我們可以在北京的機房部署一台代理伺服器,并将該代理伺服器與廣州伺服器之間的網絡路由調節到最優。如此,北京的使用者就可以通過這台代理伺服器來快速地通路我們提供的服務了。對于轉址機這項功能而言,有很多現有的軟體可以做到,它們通常工作于網絡協定層次中的IP層(即網絡層),是以它們除了可以做TCP轉址外,還可以做UDP的轉址。

  是以,概括而言,TCP代理伺服器在以下場合适用:

(1)需要隐藏真正TCP伺服器的位置。

(2)保護TCP伺服器免受應用層以下級别的協定棧攻擊。

(3)TCP轉址機。

     在實作TCP代理伺服器時,遵循以下幾點原則:

(1)當用戶端與代理伺服器建立TCP連接配接成功時,代理伺服器立即與TCP伺服器建立連接配接,并将它們作為一個連接配接對管理起來。

(2)當連接配接對中的任何一個連接配接斷開時,代理伺服器都關閉另外一個連接配接,并釋放該連接配接對所持有的任何資源。

(3)當接收到來自用戶端的任何資料時,都原封不動地轉發給TCP伺服器;當接收到來自TCP伺服器的任何資料時,都原封不動地轉發給對應的用戶端。

(4)通過用戶端的端點位址IPEndPoint來識别不同的連接配接對。

     

實作TCP透明代理(附下載下傳)

   使用TCPProxy類,我寫了個簡單的TCP代理伺服器應用程式,對于簡單的場景可以直接拿來使用。該程式運作的截圖如下:

     使用時,隻需要修改一下TCPProxyServer.exe.config中對應的配置即可。

繼續閱讀