UDP Hole Puching技術(shù):穿透防火墻建立UDP連接 |
發(fā)布時間: 2012/7/3 18:44:50 |
在防火墻上鉆孔【UDP Hole Puching】:穿透防火墻建立UDP連接 知道現(xiàn)在流行的P2P軟件和IM軟件是如何讓兩臺分處在不同防火墻后面的電腦直接對話的嗎?SIP當(dāng)然是一種,還有一種被廣泛應(yīng)用的就是本文介紹的UDP Hole Puching技術(shù)。 為了便于講述,我們假設(shè)有這樣一個網(wǎng)絡(luò)拓撲結(jié)構(gòu): IP=A.A.A.A IP=1.1.1.1 HostA----------FirewallA---------| | Server IP=S.S.S.S | HostB----------FirewallB---------| IP=B.B.B.B IP=2.2.2.2 運用這個技術(shù),必須滿足下面的條件: 1) HostA和HostB分別通過FirewallA和FirewallB經(jīng)過NAT用UDP連接到了Server 2) FirewallA和FirewallB都滿足這樣的特性,即來自相同IP相同Port的數(shù)據(jù)包,不管目的地IP是多少, 都會NAT成相同的IP+Port,舉個例子吧: HostA通過UDP Port 1234訪問主機S1時,防火墻會把數(shù)據(jù)包NAT成1.1.1.1:5668(舉例),那么HostA通過UDP Port 1234訪問主機S2時,防火墻仍然會把數(shù)據(jù)包NAT成1.1.1.1:5668。好在現(xiàn)在的NAT基本上都具備這個特性。 現(xiàn)在,HostA用UDP端口1111連接到Server的5555端口,HostB用端口2222連接到Server的5555端口,在Server看來,HostA來自1.1.1.1:9676(FirewallA NAT過了嘛),HostB則來自2.2.2.2:6573。當(dāng)HostA想直接連接HostB時,它這樣做: 1)用UDP端口1111發(fā)一個數(shù)據(jù)包給2.2.2.2:6573,注意一定要用端口1111哦,這個數(shù)據(jù)包一定會被FirewallA NAT成 1.1.1.1:9676 -> 2.2.2.2:5668(不要問為什么,看看前面對防火墻的要求先); 千萬別期望HostB會收到這個數(shù)據(jù)包,因為當(dāng)包到達FirewallB時,F(xiàn)irewallB被弄糊涂了,它根本不知道 1.1.1.1:9676 -> 2.2.2.2:6573的數(shù)據(jù)包應(yīng)該轉(zhuǎn)給誰,當(dāng)然這個包就會被丟棄并回一個ICMP包說Port不存在。但是,我們還是得到了我們想要的一些東西,那就是我們成功地告訴了FirewallA "如果有2.2.2.2:6573 -> 1.1.1.1:9676的數(shù)據(jù)包,請轉(zhuǎn)發(fā)到A.A.A.A:1111",這就是一個洞洞!! 2)接下來,和你想象的一樣,HostA通過Server中轉(zhuǎn),告訴HostB,用端口2222發(fā)一個數(shù)據(jù)包到1.1.1.1:9676,HostB照辦了,而且這個包一定會被FirewallB NAT成 2.2.2.2:6573 -> 1.1.1.1:9676。這個回復(fù)的數(shù)據(jù)包同樣在FirewallB上鉆了個孔,凡是1.1.1.1:9676 -> 2.2.2.2:6573的包都會被轉(zhuǎn)發(fā)到B.B.B.B:2222,當(dāng)數(shù)據(jù)包到達FirewallA時,F(xiàn)irewallA很高興地把2.2.2.2:6573 -> 1.1.1.1:9676的數(shù)據(jù)包轉(zhuǎn)發(fā)給A.A.A.A:1111。
本文出自:億恩科技【prubsntakaful.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |