一種nat穿越的方法、網(wǎng)絡(luò)節(jié)點(diǎn)和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[oocn] 本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種NAT穿越的方法、網(wǎng)絡(luò)節(jié)點(diǎn)和系 統(tǒng)。
【背景技術(shù)】
[0002] 網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAcMressTranslation,NAT)是一種將內(nèi)網(wǎng)地址轉(zhuǎn)化為互 聯(lián)網(wǎng)地址的轉(zhuǎn)換技術(shù),可用于解決1P地址不足的問(wèn)題,并且還能有效地避免來(lái)自互聯(lián)網(wǎng)的 攻擊,保障內(nèi)網(wǎng)的主機(jī)安全。
[000引 NAT穿越(NATtraversal)是一種用于實(shí)現(xiàn)互聯(lián)網(wǎng)設(shè)備訪問(wèn)內(nèi)網(wǎng)設(shè)備的技術(shù)。目 前有多種NAT穿越技術(shù),其中在NAT周圍使用中繼穿越(TraversalUsingRelaysaround NAT,TURN)是一種較成熟的NAT穿越技術(shù)。
[0004] 利用TURN服務(wù)器(TURNSERVER)進(jìn)行NAT穿越的模型如圖1所示,TURN服務(wù)器 處于互聯(lián)網(wǎng)中而TURN客戶端(TURNClient)處于內(nèi)網(wǎng)中。TURN客戶端會(huì)綁定一個(gè)主機(jī)傳 輸?shù)刂罚▋?cè)STTRANSPORTADDRESS),包括互聯(lián)網(wǎng)協(xié)議(InternetProtocol,IP)地址及端 口號(hào)(圖1中為10. 1. 1.2:49712);同樣,TURN服務(wù)器也會(huì)綁定一個(gè)TURN服務(wù)器傳輸?shù)刂?(TURNSERVERTRANSPORTA孤RESS)(圖 1 中為 192. 0.2. 15:3478);TURN客戶端主動(dòng)利用 自己的主機(jī)傳輸?shù)刂放cTURN服務(wù)器傳輸?shù)刂吠ㄐ?,TURN客戶端傳輸?shù)刂窌?huì)被NAT轉(zhuǎn)換為 互聯(lián)網(wǎng)傳輸?shù)刂?,稱為服務(wù)器映射傳輸?shù)刂罚⊿ERVER-REFLEXIVEtransportad化ess)(圖 1中為192. 0. 2. 1:7000),TURN服務(wù)器收到消息后會(huì)為該服務(wù)器映射傳輸?shù)刂贩峙湟粋€(gè)對(duì) 應(yīng)的轉(zhuǎn)發(fā)傳輸?shù)刂罚≧ELAYTRANSPORTADDRESS)(該里為;192. 0.2. 15:50000)。分配成功 之后,TURN客戶端的主機(jī)傳輸?shù)刂放c轉(zhuǎn)發(fā)傳輸?shù)刂沸纬梢粚?duì)一的關(guān)系,互聯(lián)網(wǎng)主機(jī)陽(yáng)ERA (其傳輸?shù)刂窞?92. 0. 2. 210:49191)只要與該轉(zhuǎn)發(fā)傳輸?shù)刂吠ㄐ?,TURN服務(wù)器就會(huì)將數(shù)據(jù) 轉(zhuǎn)發(fā)給對(duì)應(yīng)的服務(wù)器映射傳輸?shù)刂?,?jīng)過(guò)NAT映射后內(nèi)網(wǎng)的TURN客戶端便可收到互聯(lián)網(wǎng)主 機(jī)陽(yáng)邸A發(fā)送的數(shù)據(jù),從而實(shí)現(xiàn)了NAT穿越。
[0005] 利用TURN進(jìn)行NAT穿越時(shí),若互聯(lián)網(wǎng)主機(jī)想與內(nèi)網(wǎng)主機(jī)的某個(gè)端口進(jìn)行通信,貝U 內(nèi)網(wǎng)主機(jī)的該端口必須主動(dòng)向TURN服務(wù)器發(fā)起請(qǐng)求,TURN服務(wù)器為其分配轉(zhuǎn)發(fā)傳輸?shù)刂?后,互聯(lián)網(wǎng)主機(jī)才能與該內(nèi)網(wǎng)主機(jī)進(jìn)行通信;而如果希望由互聯(lián)網(wǎng)主機(jī)陽(yáng)ERA主動(dòng)向TURN 客戶端的某一個(gè)端口發(fā)起請(qǐng)求,則數(shù)據(jù)包會(huì)由于未分配轉(zhuǎn)發(fā)傳輸?shù)刂范粊G棄。
[0006] 在大規(guī)模云掃描系統(tǒng)中,當(dāng)掃描目標(biāo)處于內(nèi)網(wǎng)中(即掃描目標(biāo)通過(guò)NAT訪問(wèn)互聯(lián) 網(wǎng)),而掃描服務(wù)器處于互聯(lián)網(wǎng)中時(shí),利用TURN進(jìn)行NAT穿越存在如下問(wèn)題;進(jìn)行掃描時(shí),一 般是由掃描服務(wù)器直接向掃描目標(biāo)發(fā)送掃描數(shù)據(jù),而不是掃描目標(biāo)主動(dòng)發(fā)起請(qǐng)求,因此在 TURN服務(wù)器上不會(huì)有掃描目標(biāo)對(duì)應(yīng)的轉(zhuǎn)發(fā)傳輸?shù)刂?,從而無(wú)法實(shí)現(xiàn)NAT穿越。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明實(shí)施例提供一種NAT穿越的方法、網(wǎng)絡(luò)節(jié)點(diǎn)和系統(tǒng),用W解決現(xiàn)有采用 TURN方法時(shí),掃描服務(wù)器主動(dòng)發(fā)起掃描請(qǐng)求時(shí),無(wú)法實(shí)現(xiàn)NAT穿越的問(wèn)題。
[0008] 第一方面,本發(fā)明實(shí)施例提供一種NAT穿越的方法,包括:
[0009] 位于內(nèi)網(wǎng)中的第一節(jié)點(diǎn)通過(guò)向位于互聯(lián)網(wǎng)中的第二節(jié)點(diǎn)發(fā)出P2P連接建立請(qǐng)求, 與第二節(jié)點(diǎn)建立能夠使第二節(jié)點(diǎn)穿越到所述內(nèi)網(wǎng)中的P2P連接;
[0010] 第一節(jié)點(diǎn)作為Socks服務(wù)器接收作為Socks客戶端的第二節(jié)點(diǎn)通過(guò)所述P2P連接 發(fā)送的建立第一Socks連接的請(qǐng)求,與第二節(jié)點(diǎn)建立第一Socks連接;
[0011] 第一節(jié)點(diǎn)向所述內(nèi)網(wǎng)的第一設(shè)備轉(zhuǎn)發(fā)第一節(jié)點(diǎn)通過(guò)第一Socks連接從第二節(jié)點(diǎn) 處接收的第一數(shù)據(jù)包,其中所述第一數(shù)據(jù)包是第二節(jié)點(diǎn)利用所述P2P連接穿越到所述內(nèi)網(wǎng) 中而轉(zhuǎn)發(fā)的由第一互聯(lián)網(wǎng)設(shè)備的第一端口發(fā)給所述內(nèi)網(wǎng)的第一設(shè)備的第一端口的數(shù)據(jù)包。
[0012] 通過(guò)利用P2P連接實(shí)現(xiàn)第二節(jié)點(diǎn)到第一節(jié)點(diǎn)的NAT穿越,并利用Socks代理技術(shù) 轉(zhuǎn)發(fā)數(shù)據(jù),解決了互聯(lián)網(wǎng)設(shè)備主動(dòng)向內(nèi)網(wǎng)的設(shè)備發(fā)送數(shù)據(jù)時(shí)無(wú)法實(shí)現(xiàn)NAT穿越的問(wèn)題。
[0013] 較佳地,在第一節(jié)點(diǎn)與第二節(jié)點(diǎn)建立第一Socks連接之后,還包括:
[0014] 第一節(jié)點(diǎn)通過(guò)第一Socks連接將從所述內(nèi)網(wǎng)的第一設(shè)備處接收的第二數(shù)據(jù)包發(fā) 送給第二節(jié)點(diǎn);
[0015] 其中,所述第二數(shù)據(jù)包是由所述內(nèi)網(wǎng)的第一設(shè)備的第一端口發(fā)給第一互聯(lián)網(wǎng)設(shè)備 的第一端口的數(shù)據(jù)包。
[0016] 本優(yōu)選方案實(shí)現(xiàn)了內(nèi)網(wǎng)的第一設(shè)備向互聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)發(fā)送。
[0017] 較佳地,在第一節(jié)點(diǎn)建立所述P2P連接之后,第一節(jié)點(diǎn)接收建立第一Socks連接的 請(qǐng)求之前,該方法還包括:
[0018] 第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送用W保持所述P2P連接的數(shù)據(jù)包,W使第一節(jié)點(diǎn)的內(nèi)網(wǎng) 地址及內(nèi)網(wǎng)端口號(hào)經(jīng)過(guò)NAT映射后保持不變。
[0019] 通過(guò)采用本優(yōu)選方案,可W避免在P2P連接斷了后,重新再次建立P2P連接的過(guò) 程。并且由于第一節(jié)點(diǎn)的對(duì)等實(shí)體和第二節(jié)點(diǎn)的對(duì)等實(shí)體之間W固定的端口進(jìn)行通信,且 連接一直保持,因此無(wú)論Socks客戶端或Sock服務(wù)器發(fā)送數(shù)據(jù)的端口如何變化,在第一節(jié) 點(diǎn)的對(duì)等實(shí)體和第二節(jié)點(diǎn)的對(duì)等實(shí)體之間總是W固定地址和端口進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),達(dá)到了源 端口和目的端口的收斂,從而可W穿越任何類型的NAT。
[0020] 較佳地,第一節(jié)點(diǎn)與第二節(jié)點(diǎn)建立第一Socks連接,包括:
[0021] 第一節(jié)點(diǎn)接收第二節(jié)點(diǎn)發(fā)送的用于建立第一Socks連接的消息,并獲取消息中的 第一Socks連接標(biāo)識(shí);
[0022] 第一節(jié)點(diǎn)在確定已記錄的Socks連接與Socks連接標(biāo)識(shí)的對(duì)應(yīng)關(guān)系中不存在第一 Socks連接標(biāo)識(shí)時(shí),與第二節(jié)點(diǎn)建立第一Socks連接,并記錄第一Socks連接與第一Socks 連接標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
[0023] 采用本優(yōu)選方案,為每一個(gè)Socks連接分配一個(gè)Socks連接標(biāo)識(shí),為不同Socks連 接對(duì)應(yīng)的數(shù)據(jù)包添加對(duì)應(yīng)的Socks連接標(biāo)識(shí),從而可同時(shí)支持多個(gè)Socks連接,進(jìn)而實(shí)現(xiàn)了 互聯(lián)網(wǎng)中的掃描服務(wù)器對(duì)內(nèi)網(wǎng)中的掃描目標(biāo)的多個(gè)端口進(jìn)行掃描。
[0024] 較佳地,第一節(jié)點(diǎn)轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包,包括:
[00巧]第一節(jié)點(diǎn)在從第二節(jié)點(diǎn)處收到所述第一數(shù)據(jù)包后,從所述第一數(shù)據(jù)包中獲取第一Socks連接標(biāo)識(shí);
[0026] 若根據(jù)已記錄的第一Socks連接標(biāo)識(shí)與第一Socks連接的對(duì)應(yīng)關(guān)系確定所述第一 數(shù)據(jù)包對(duì)應(yīng)第一Socks連接,則將所述第一數(shù)據(jù)包通過(guò)第一Socks連接轉(zhuǎn)發(fā)給所述內(nèi)網(wǎng)的 第一設(shè)備。
[0027] 本優(yōu)選方案給出了在多個(gè)Socks連接同時(shí)存在時(shí),第一數(shù)據(jù)包的轉(zhuǎn)發(fā)的方案。
[0028] 較佳地,第一節(jié)點(diǎn)與第二節(jié)點(diǎn)建立第一Socks連接包括:第一節(jié)點(diǎn)接收第二節(jié)點(diǎn) 發(fā)送的用于建立第一Socks連接的消息,并獲取消息中的第一Socks連接標(biāo)識(shí);第一節(jié)點(diǎn)在 確定已記錄的Socks連接與Socks連接標(biāo)識(shí)的對(duì)應(yīng)關(guān)系中不存在第一Socks連接標(biāo)識(shí)時(shí), 與第二節(jié)點(diǎn)建立第一Socks連接,并記錄第一Socks連接與第一Socks連接標(biāo)識(shí)的對(duì)應(yīng)關(guān) 系;
[0029] 第一節(jié)點(diǎn)將所述第二數(shù)據(jù)包發(fā)送給第二節(jié)點(diǎn),包括;第一節(jié)點(diǎn)在從所述內(nèi)網(wǎng)的第 一設(shè)備處收到所述第二數(shù)據(jù)包后,在所述第二數(shù)據(jù)包中添加第一Socks連接標(biāo)識(shí),通過(guò)第 一Socks連接經(jīng)由第二節(jié)點(diǎn)轉(zhuǎn)發(fā)給第一互聯(lián)網(wǎng)設(shè)備。
[0030] 本優(yōu)選方案給出了在存在多個(gè)Socks連接時(shí),第二數(shù)據(jù)包的轉(zhuǎn)發(fā)的具體實(shí)現(xiàn)方 案。
[0031] 第二方面,本發(fā)明實(shí)施例還提供了另一種NAT穿越的方法,該方法包括:
[0032] 位于互聯(lián)網(wǎng)中的第二節(jié)點(diǎn)接收位于內(nèi)網(wǎng)中的第一節(jié)點(diǎn)發(fā)送的P2P連接建立請(qǐng)求, 與第一節(jié)點(diǎn)建立能夠使第二節(jié)點(diǎn)穿越到所述內(nèi)網(wǎng)中的P2P連接;
[0033] 第二節(jié)點(diǎn)作為Socks客戶端通過(guò)所述P2P連接穿越到所述內(nèi)網(wǎng)中,向作為Socks 服務(wù)器的第一節(jié)點(diǎn)發(fā)送建立第一Socks連接的請(qǐng)求,與第一節(jié)點(diǎn)建立第一Socks連接;
[0034] 第二節(jié)點(diǎn)通過(guò)第一Socks連接,利用所述P2P連接穿越到所述內(nèi)網(wǎng)中,將從第一互 聯(lián)網(wǎng)設(shè)備處接收的第一數(shù)據(jù)包轉(zhuǎn)發(fā)給第一節(jié)點(diǎn),W使第一節(jié)點(diǎn)將所述第一數(shù)據(jù)包轉(zhuǎn)發(fā)給所 述內(nèi)網(wǎng)的第一設(shè)備,其中所述第一數(shù)據(jù)包是由第一互聯(lián)網(wǎng)設(shè)備的第一端口發(fā)送至所述內(nèi)網(wǎng) 的第一設(shè)備的第一端口的數(shù)據(jù)包。
[003引通過(guò)利用P2P連接實(shí)現(xiàn)第二節(jié)點(diǎn)到第一節(jié)點(diǎn)的NAT穿越,并利用Socks代理技術(shù) 轉(zhuǎn)發(fā)數(shù)據(jù),解決了互聯(lián)網(wǎng)設(shè)備主動(dòng)向內(nèi)網(wǎng)的設(shè)備發(fā)送數(shù)據(jù)時(shí)無(wú)法實(shí)現(xiàn)NAT穿越的問(wèn)題。
[0036] 較佳地,在第二節(jié)點(diǎn)與第一節(jié)點(diǎn)建立第一Socks連接之后,該方法還包括:
[0037] 第二節(jié)點(diǎn)通過(guò)第一Socks連接將從第一節(jié)點(diǎn)處接收的第二數(shù)據(jù)包轉(zhuǎn)發(fā)給第一互 聯(lián)網(wǎng)設(shè)備;
[0038] 其中,所述第二數(shù)據(jù)包是由所述內(nèi)網(wǎng)的第一設(shè)備的第一端口發(fā)給第一互聯(lián)網(wǎng)設(shè)備 的第一端口的數(shù)據(jù)包。
[0039] 本優(yōu)選方案實(shí)現(xiàn)了內(nèi)網(wǎng)的第一設(shè)備向互聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)發(fā)送。
[0040] 較佳地,在第二節(jié)點(diǎn)與第一節(jié)點(diǎn)建立所述P2P連接之后,第二節(jié)點(diǎn)向第一節(jié)點(diǎn)發(fā) 送建立第一Socks連接的請(qǐng)求之前,該方法還包括:
[0041] 第二節(jié)點(diǎn)接收第一節(jié)點(diǎn)發(fā)送的用W保持所述P2P連接的數(shù)據(jù)包,其中,所述用W 保持所述P2P連接的數(shù)據(jù)包用于使第一節(jié)點(diǎn)的內(nèi)網(wǎng)地址及內(nèi)網(wǎng)端口號(hào)經(jīng)過(guò)NAT映射后保持 不變。
[0042] 通過(guò)采用本優(yōu)選方案,可W避免在P2P連接斷了后,重新再次建立P2P連接的過(guò) 程。并且由于第一節(jié)點(diǎn)的對(duì)等實(shí)體和第二節(jié)點(diǎn)的對(duì)等實(shí)體之間W固定的端口進(jìn)行通信,且 連接一直保持,因此無(wú)論Socks客戶端或Sock服務(wù)器發(fā)送數(shù)據(jù)的端口如何變化,在第一節(jié) 點(diǎn)的對(duì)等實(shí)體和第二節(jié)點(diǎn)的對(duì)等實(shí)體之間總是W固定地址和端口進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),達(dá)到了源 端口和目的端口的收斂,從而可W穿越任何類型的N