專(zhuān)利名稱(chēng):一種將tcp網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法
一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法技術(shù)領(lǐng)域
本發(fā)明應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)通信領(lǐng)域,特別涉及一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為 客戶(hù)端的方法,該方法采用一個(gè)公共的轉(zhuǎn)發(fā)服務(wù)器模塊,實(shí)現(xiàn)外網(wǎng)客戶(hù)端與內(nèi)網(wǎng)服務(wù)器之 間的通信轉(zhuǎn)發(fā),服務(wù)端機(jī)器不需要配置固定IP,不需要修改現(xiàn)有的服務(wù)端和客戶(hù)端軟件,就 能使外網(wǎng)機(jī)器能夠訪問(wèn)內(nèi)網(wǎng)機(jī)器上的服務(wù)。
背景技術(shù):
在企業(yè)內(nèi)部網(wǎng)絡(luò)中,為了保證網(wǎng)絡(luò)安全,都會(huì)設(shè)置防火墻,只允許內(nèi)網(wǎng)機(jī)器作為客 戶(hù)端連接外網(wǎng)的服務(wù)端機(jī)器,而不允許內(nèi)網(wǎng)機(jī)器作為服務(wù)端,讓外網(wǎng)機(jī)器來(lái)連接。如一般公 司內(nèi)網(wǎng)中的機(jī)器都可以作為客戶(hù)端訪問(wèn)互聯(lián)網(wǎng)網(wǎng)頁(yè)或者互聯(lián)網(wǎng)上的FTP服務(wù)器,但內(nèi)網(wǎng)的 FTP服務(wù)器等機(jī)器,是不允許外網(wǎng)機(jī)器訪問(wèn)的。
不允許內(nèi)網(wǎng)機(jī)器作為服務(wù)端被外網(wǎng)訪問(wèn),除了安全因素,還有一個(gè)原因 是,如果作為服務(wù)端被外網(wǎng)訪問(wèn),服務(wù)端必須具備固定的外網(wǎng)IP和端口號(hào)。由于固定的外 網(wǎng)IP資源數(shù)量有限,非常寶貴,因此,一般企業(yè)只是申請(qǐng)很少幾個(gè)固定IP。通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn) 換(NAT)技術(shù),可以允許很多臺(tái)內(nèi)網(wǎng)機(jī)器作為客戶(hù)端連接外網(wǎng),共享這幾個(gè)固定IP,例如以 太網(wǎng)絡(luò)。雖然每個(gè)客戶(hù)端連接使用的外網(wǎng)IP相同,但端口號(hào)不同,因此多個(gè)連接之間沒(méi)有 沖突。如果作為服務(wù)端,不但要求IP固定,還要求服務(wù)端的端口號(hào)相同,因此,無(wú)法實(shí)現(xiàn)端 口號(hào)相同的多臺(tái)服務(wù)端機(jī)器,共享外網(wǎng)IP。
在某些應(yīng)用場(chǎng)景中,允許內(nèi)網(wǎng)機(jī)器作為服務(wù)端被外網(wǎng)訪問(wèn)是必須的,比如 網(wǎng)絡(luò)管理員需要在遠(yuǎn)程以Telnet、SSH等方式連接內(nèi)網(wǎng)機(jī)器,進(jìn)行遠(yuǎn)程診斷,就必須要求內(nèi) 網(wǎng)機(jī)器作為服務(wù)端允許外網(wǎng)機(jī)器連接。
對(duì)于這種只允許內(nèi)網(wǎng)機(jī)器作為客戶(hù)端聯(lián)網(wǎng),又要求內(nèi)網(wǎng)機(jī)器對(duì)外提供服 務(wù)允許外網(wǎng)機(jī)器訪問(wèn)的情況,目前還沒(méi)有通用的解決方案?,F(xiàn)有的一些解決方案,都是針對(duì) 不同的服務(wù)開(kāi)發(fā)專(zhuān)門(mén)的軟件,無(wú)法直接利用現(xiàn)有的服務(wù)端軟件和客戶(hù)端軟件。比如,國(guó)外的 TeamViewer軟件,是一個(gè)專(zhuān)門(mén)開(kāi)發(fā)的遠(yuǎn)程桌面控制軟件,在被控機(jī)器上安裝后,只要被控機(jī) 器能作為客戶(hù)端聯(lián)網(wǎng),就可以使用TeamViewer客戶(hù)端軟件,遠(yuǎn)程控制被控機(jī)器,兩個(gè)機(jī)器 之間通過(guò)一個(gè)中間服務(wù)器進(jìn)行信息轉(zhuǎn)發(fā)。國(guó)內(nèi)的51MyPC軟件,也采用類(lèi)似機(jī)制,實(shí)現(xiàn)了遠(yuǎn) 程控制功能。
現(xiàn)有解決方案的缺陷是,必須針對(duì)不同類(lèi)型的服務(wù)進(jìn)行不同開(kāi)發(fā),不能利用已有 的服務(wù)端和客戶(hù)端軟件。比如,現(xiàn)有的Telnet、SSH、Wind0Ws遠(yuǎn)程桌面等,都是非常成熟、應(yīng) 用廣泛的網(wǎng)絡(luò)管理服務(wù),但都必須要求服務(wù)端有固定的外網(wǎng)IP和端口,客戶(hù)端程序才能連 接。目前沒(méi)有一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的通用方法,允許直接使用現(xiàn)有的 服務(wù)端和客戶(hù)端軟件。發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)上述問(wèn)題提出的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法技術(shù)方案,該方法采用一個(gè)公共的轉(zhuǎn)發(fā)服務(wù)器模塊,實(shí)現(xiàn)外網(wǎng)客戶(hù)端與內(nèi)網(wǎng)服務(wù)器 之間的通信轉(zhuǎn)發(fā),服務(wù)端機(jī)器不直接對(duì)外網(wǎng)暴露服務(wù),服務(wù)端機(jī)器不再需要配置固定IP,提 高了內(nèi)網(wǎng)安全性。
為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是,一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客 戶(hù)端的方法,包括轉(zhuǎn)發(fā)服務(wù)器模塊、服務(wù)端代理和客戶(hù)端機(jī)器,所述方法的步驟包括至少有一個(gè)提供數(shù)據(jù)轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)服務(wù)器模塊建立在TCP網(wǎng)絡(luò)中,轉(zhuǎn)發(fā)服務(wù)器模塊中設(shè) 置有一個(gè)TCP網(wǎng)絡(luò)IP地址、設(shè)置有命令端口和數(shù)據(jù)端口、設(shè)置有一個(gè)數(shù)據(jù)轉(zhuǎn)發(fā)器和一個(gè)用 戶(hù)認(rèn)證子模塊,轉(zhuǎn)發(fā)服務(wù)器模塊始終監(jiān)聽(tīng)命令端口和數(shù)據(jù)端口,準(zhǔn)備接收服務(wù)端代理和客 戶(hù)端機(jī)器發(fā)起的連接,所述客戶(hù)端機(jī)器包括客戶(hù)端代理和客戶(hù)端;至少有一個(gè)內(nèi)網(wǎng)服務(wù)端代理通過(guò)所述命令端口和數(shù)據(jù)端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立連 接,所述內(nèi)網(wǎng)服務(wù)端代理至少連接一個(gè)內(nèi)網(wǎng)服務(wù)端的實(shí)際服務(wù);至少有一個(gè)外網(wǎng)客戶(hù)端機(jī)器的客戶(hù)端代理通過(guò)所述命令端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立 連接,同一個(gè)客戶(hù)端機(jī)器的客戶(hù)端與轉(zhuǎn)發(fā)服務(wù)器模塊的數(shù)據(jù)端口建立連接。
所述轉(zhuǎn)發(fā)服務(wù)器模塊執(zhí)行的步驟包括命令端口監(jiān)聽(tīng)線程處理和數(shù)據(jù)端口監(jiān)聽(tīng)線 程處理;所述命令端口監(jiān)聽(tīng)線程處理步驟包括收到命令連接后,通過(guò)用戶(hù)認(rèn)證子模塊進(jìn)行用 戶(hù)名、密碼驗(yàn)證;密碼驗(yàn)證出錯(cuò),關(guān)閉該連接,繼續(xù)等待新的命令連接;密碼驗(yàn)證成功,啟動(dòng) 命令處理線程;所述數(shù)據(jù)端口監(jiān)聽(tīng)線程處理步驟包括先接收定長(zhǎng)的數(shù)據(jù)連接命令字和服務(wù)訪問(wèn)ID 信息,然后接收與具體服務(wù)相關(guān)的數(shù)據(jù),所述轉(zhuǎn)發(fā)服務(wù)器模塊只解析開(kāi)頭的定長(zhǎng)數(shù)據(jù),然后 直接進(jìn)行轉(zhuǎn)發(fā)處理,所述數(shù)據(jù)連接命令字有“提供服務(wù)”和“訪問(wèn)服務(wù)”,“提供服務(wù)”命令由 服務(wù)端代理數(shù)據(jù)連接發(fā)送,“訪問(wèn)服務(wù)”命令由客戶(hù)端數(shù)據(jù)連接發(fā)送,如果“提供服務(wù)”連接 與“訪問(wèn)服務(wù)”有相同的服務(wù)訪問(wèn)ID,表明這兩個(gè)連接對(duì)應(yīng)的是同一個(gè)服務(wù)訪問(wèn)請(qǐng)求,傳入 兩個(gè)連接的Socket信息并記為SocketSl和SocketS2,啟動(dòng)通信轉(zhuǎn)發(fā)線程。
所述轉(zhuǎn)發(fā)服務(wù)器模塊命令處理線程的步驟是a.判斷命令類(lèi)型;對(duì)于服務(wù)端代理服務(wù)注冊(cè)命令保存服務(wù)注冊(cè)信息和該連接的 Socket信息,返回注冊(cè)結(jié)果信息;對(duì)于客戶(hù)端代理服務(wù)查詢(xún)命令返回目前注冊(cè)的所有服 務(wù)信息列表,然后等待后續(xù)的服務(wù)選擇命令;b.收到服務(wù)選擇命令后,根據(jù)命令中選擇的服務(wù)條目,向?qū)?yīng)的服務(wù)端代理Socket發(fā) 送服務(wù)選擇命令;c.服務(wù)端代理Socket返回服務(wù)選擇命令執(zhí)行結(jié)果,如果執(zhí)行成功,返回服務(wù)訪問(wèn)ID 值,轉(zhuǎn)發(fā)服務(wù)器模塊將該ID返回給客戶(hù)端代理;如果執(zhí)行失敗,轉(zhuǎn)發(fā)服務(wù)器模塊將錯(cuò)誤描 述信息返回給客戶(hù)端代理;d.之后繼續(xù)等待后續(xù)的服務(wù)選擇命令,直到退出該線程。
所述命令端口與服務(wù)端代理和客戶(hù)端代理的連接采用SSL/TLS傳輸層加密機(jī)制。
所述服務(wù)端代理執(zhí)行的步驟包括al.連接中轉(zhuǎn)服務(wù)器命令端口,發(fā)送服務(wù)注冊(cè)命令;a2.服務(wù)注冊(cè)成功后,等待接收服務(wù)選擇命令,直到程序被手動(dòng)關(guān)閉;a3.收到服務(wù)選擇命令后,連接服務(wù)選擇命令中對(duì)應(yīng)的服務(wù),創(chuàng)建Socket Si,如果連接出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命令;a4.如果連接服務(wù)成功,采用標(biāo)準(zhǔn)的GUID方式生成隨機(jī)的服務(wù)ID ; a5.創(chuàng)建Socket S2,發(fā)送“提供服務(wù)”命令字+服務(wù)ID。
a6.如果連接或發(fā)送出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命 令;a7.連接并發(fā)送成功后,向服務(wù)選擇命令返回服務(wù)ID信息,啟動(dòng)線程處理Socket Sl 和Socket S2的服務(wù)通信轉(zhuǎn)發(fā)。
所述服務(wù)通信轉(zhuǎn)發(fā)的步驟是alO.調(diào)用select函數(shù),檢測(cè)SocketSl或SocketS2的數(shù)據(jù)是否可讀; all. 如果SocketSl可讀,從SocketSl讀取數(shù)據(jù)發(fā)送到SocketS2 ;如果SocketS2可 讀,從SocketS2讀取數(shù)據(jù)發(fā)送到SocketSl ;al2.如果沒(méi)有錯(cuò)誤,繼續(xù)執(zhí)行步驟alO,進(jìn)行循環(huán)中轉(zhuǎn)處理;al3.如果SocketSl或者SocketS2出現(xiàn)任何錯(cuò)誤,或者任何一方連接斷開(kāi),關(guān)閉 SocketSl和SocketS2,退出中轉(zhuǎn)線程。
所述客戶(hù)端代理執(zhí)行的步驟包括bl.連接轉(zhuǎn)發(fā)服務(wù)器模塊命令端口,發(fā)送服務(wù)查詢(xún)命令; b2.根據(jù)服務(wù)查詢(xún)命令的返回,顯示可以訪問(wèn)的服務(wù)列表; b3.等待用戶(hù)選擇某個(gè)服務(wù);b4.用戶(hù)選擇訪問(wèn)后,發(fā)送服務(wù)選擇命令,如果返回失敗,提示錯(cuò)誤信息,執(zhí)行步驟b3, 允許用戶(hù)繼續(xù)選擇其他服務(wù),或者退出程序;b5.服務(wù)選擇命令返回成功后,保存返回的服務(wù)訪問(wèn)ID;b6.注冊(cè)Socket Hook模塊,使該模塊能截獲后續(xù)客戶(hù)端程序中對(duì)socket connect函 數(shù)的調(diào)用;b7.啟動(dòng)服務(wù)對(duì)應(yīng)的客戶(hù)端程序子進(jìn)程,傳入轉(zhuǎn)發(fā)服務(wù)器模塊的IP和數(shù)據(jù)端口作為 連接參數(shù),子進(jìn)程啟動(dòng)后,主程序執(zhí)行步驟b3,允許用戶(hù)繼續(xù)選擇其他服務(wù)。
所述Socket Hook模塊執(zhí)行的步驟包括,截獲客戶(hù)端程序中對(duì)socket connect函 數(shù)的調(diào)用后,首先調(diào)用客戶(hù)端操作系統(tǒng)自身的connect函數(shù);然后獲取當(dāng)前執(zhí)行connect函 數(shù)的進(jìn)程ID,向客戶(hù)端代理查詢(xún)?cè)撨M(jìn)程ID是否是由客戶(hù)端代理啟動(dòng)的客戶(hù)端子進(jìn)程,如果 不是,該模塊直接返回到主程序;如果是由客戶(hù)端代理啟動(dòng)的客戶(hù)端子進(jìn)程,客戶(hù)端代理會(huì) 同時(shí)返回該子進(jìn)程對(duì)應(yīng)的服務(wù)訪問(wèn)ID,Socket Hook模塊向服務(wù)端發(fā)送"服務(wù)訪問(wèn)"命令 字+對(duì)應(yīng)的服務(wù)訪問(wèn)ID,然后返回到主程序。
本發(fā)明對(duì)現(xiàn)有技術(shù)的貢獻(xiàn)是1. 服務(wù)端機(jī)器不直接對(duì)外網(wǎng)暴露服務(wù),提高了內(nèi)網(wǎng)安全性,不再需要配置固定IP, 減少了固定IP這一寶貴資源,可以為公司節(jié)省成本。
2.網(wǎng)絡(luò)中轉(zhuǎn)為純數(shù)據(jù)中轉(zhuǎn)機(jī)制,沒(méi)有其他附加處理邏輯,因此該方法的通信效率很高。
3.通信轉(zhuǎn)發(fā)基于TCP協(xié)議層的轉(zhuǎn)發(fā),支持的服務(wù)廣泛,如Windows遠(yuǎn)程桌面、VNC、 TELNET、SSH等基于TCP的服務(wù)都可以使用。
4.本發(fā)明是基于TCP通信轉(zhuǎn)發(fā)的通用實(shí)現(xiàn)方法,現(xiàn)有的服務(wù)端、客戶(hù)端軟件不需要修改,可以利用已有的軟件資產(chǎn)。
5.通過(guò)多服務(wù)端代理、多公共轉(zhuǎn)發(fā)服務(wù)器模塊機(jī)制,客戶(hù)端軟件通過(guò)不同的公共 轉(zhuǎn)發(fā)服務(wù)器模塊,都能訪問(wèn)到位于對(duì)應(yīng)的服務(wù),大大提高了系統(tǒng)的容錯(cuò)性。
6.公共轉(zhuǎn)發(fā)服務(wù)器模塊只負(fù)責(zé)服務(wù)注冊(cè)、服務(wù)查詢(xún)、通信中轉(zhuǎn)等處理,其處理邏 輯與具體服務(wù)沒(méi)有關(guān)系;因此,可以由第三方構(gòu)建公共轉(zhuǎn)發(fā)服務(wù)器模塊,對(duì)外提供商業(yè)或免 費(fèi)的通信轉(zhuǎn)發(fā)服務(wù)。
下面結(jié)合實(shí)施例和附圖對(duì)本發(fā)明做一詳細(xì)描述。
圖1為本發(fā)明方法系統(tǒng)邏輯框圖;圖2為命令端口監(jiān)聽(tīng)線程處理邏輯流程圖; 圖3為命令處理線程的處理邏輯流程圖; 圖4為數(shù)據(jù)端口監(jiān)聽(tīng)線程處理邏輯流程圖; 圖5為服務(wù)端代理程序處理模塊處理邏輯流程圖; 圖6為客戶(hù)端代理程序處理模塊的處理邏輯。
具體實(shí)施方式
一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法實(shí)施例,參見(jiàn)圖1,包括轉(zhuǎn)發(fā)服務(wù) 器模塊1、服務(wù)端代理2和客戶(hù)端機(jī)器3,所述方法的步驟包括至少有一個(gè)提供數(shù)據(jù)轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)服務(wù)器模塊建立在TCP網(wǎng)絡(luò)中,轉(zhuǎn)發(fā)服務(wù)器模塊中設(shè) 置有一個(gè)TCP網(wǎng)絡(luò)IP地址、設(shè)置有命令端口 1-1和數(shù)據(jù)端口 1-2、設(shè)置有一個(gè)數(shù)據(jù)轉(zhuǎn)發(fā)器和 一個(gè)用戶(hù)認(rèn)證子模塊,轉(zhuǎn)發(fā)服務(wù)器模塊始終監(jiān)聽(tīng)命令端口和數(shù)據(jù)端口,準(zhǔn)備接收服務(wù)端代 理和客戶(hù)端機(jī)器發(fā)起的連接,所述客戶(hù)端機(jī)器包括客戶(hù)端代理和客戶(hù)端;至少有一個(gè)內(nèi)網(wǎng)服務(wù)端代理通過(guò)所述命令端口和數(shù)據(jù)端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立連 接,所述內(nèi)網(wǎng)服務(wù)端代理至少連接一個(gè)內(nèi)網(wǎng)服務(wù)端4的實(shí)際服務(wù);其中內(nèi)網(wǎng)服務(wù)端代理可 以在同一個(gè)服務(wù)端中也可以不在同一個(gè)服務(wù)端中;至少有一個(gè)外網(wǎng)客戶(hù)端機(jī)器的客戶(hù)端代理通過(guò)所述命令端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立 連接,同一個(gè)客戶(hù)端機(jī)器的客戶(hù)端與轉(zhuǎn)發(fā)服務(wù)器模塊的數(shù)據(jù)端口建立連接。
當(dāng)然,如圖1所示,實(shí)際的應(yīng)用中服務(wù)端和客戶(hù)端機(jī)器不只是一個(gè)而是多個(gè),作為 內(nèi)網(wǎng)服務(wù)端上只需要部署一個(gè)服務(wù)端代理,所述的服務(wù)端代理是一個(gè)服務(wù)程序,該程序支 持與位于本服務(wù)端或與之相連的內(nèi)網(wǎng)其他服務(wù)端的多種不同的實(shí)際服務(wù),如Telnet、SSH、 Windows遠(yuǎn)程桌面等服務(wù),而Telnet、SSH、Wind0WS遠(yuǎn)程桌面等服務(wù)將不再直接面對(duì)外網(wǎng)提 {共。
服務(wù)端中的服務(wù)程序,也可以位于該服務(wù)端能訪問(wèn)的其他服務(wù)端上,這樣該服務(wù) 端可以作為內(nèi)網(wǎng)中的一個(gè)內(nèi)部轉(zhuǎn)發(fā)服務(wù)器來(lái)使用,只要這一臺(tái)機(jī)器能連接外網(wǎng)(TCP網(wǎng)絡(luò)) 的轉(zhuǎn)發(fā)服務(wù)器模塊即可。這種部署方式,服務(wù)端代理的轉(zhuǎn)發(fā)效率會(huì)稍有降低,但只需要這一 臺(tái)服務(wù)端連接外網(wǎng),因此增加了網(wǎng)絡(luò)安全性。服務(wù)端代理程序本身與平臺(tái)無(wú)關(guān),這種部署方 式服務(wù)器的操作系統(tǒng)不受限于實(shí)際服務(wù)程序支持的運(yùn)行平臺(tái)。例如,可以部署一臺(tái)Linux 機(jī)器,上面安裝服務(wù)端代理程序,通過(guò)該機(jī)器訪問(wèn)其他服務(wù)端上的Windows遠(yuǎn)程桌面服務(wù)。7
服務(wù)端代理支持同時(shí)連接多個(gè)轉(zhuǎn)發(fā)服務(wù)器模塊,因此,可以建立部署多臺(tái)公共轉(zhuǎn) 發(fā)服務(wù)器模塊,以提高系統(tǒng)容錯(cuò)性。
所述轉(zhuǎn)發(fā)服務(wù)器模塊,主要提供服務(wù)注冊(cè)、服務(wù)查詢(xún)、服務(wù)選擇和服務(wù)訪問(wèn)轉(zhuǎn)發(fā)功 能。
該轉(zhuǎn)發(fā)服務(wù)器模塊具有固定的外網(wǎng)IP,客戶(hù)端機(jī)器和服務(wù)端代理都需要能夠訪問(wèn) 該轉(zhuǎn)發(fā)服務(wù)器模塊。因此作為每個(gè)用戶(hù)網(wǎng)絡(luò)中就不需要部署能夠被外網(wǎng)訪問(wèn)的服務(wù)器,只 要用戶(hù)網(wǎng)絡(luò)的服務(wù)端能作為服務(wù)客戶(hù)端訪問(wèn)位于外網(wǎng)的轉(zhuǎn)發(fā)服務(wù)器模塊就行,因此這里的 服務(wù)端可以被視作一個(gè)服務(wù)客戶(hù)端。
本實(shí)施例所述轉(zhuǎn)發(fā)服務(wù)器模塊中包括有轉(zhuǎn)發(fā)服務(wù)器模塊程序處理模塊,所述服務(wù) 端代理是一個(gè)服務(wù)端代理程序處理模塊,所述客戶(hù)端代理是一個(gè)客戶(hù)端代理程序處理模 塊,所述客戶(hù)端是一個(gè)客戶(hù)端處理模塊,其中客戶(hù)端代理程序處理模塊和客戶(hù)端處理模塊 是在同一個(gè)客戶(hù)端機(jī)器中。
轉(zhuǎn)發(fā)服務(wù)器模塊程序處理模塊是一個(gè)后臺(tái)服務(wù)程序處理模塊,提供服務(wù)注冊(cè)、服 務(wù)查詢(xún)、服務(wù)選擇和服務(wù)訪問(wèn)轉(zhuǎn)發(fā)功能,支持Windows、Linux等多種系統(tǒng)平臺(tái),其轉(zhuǎn)發(fā)服務(wù) 器模塊程序處理邏輯具體說(shuō)明如下轉(zhuǎn)發(fā)服務(wù)器模塊程序啟動(dòng)后,作為T(mén)CP通信的服務(wù)端,開(kāi)啟兩個(gè)線程,分別監(jiān)聽(tīng)命令端 口和數(shù)據(jù)端口 ;這兩個(gè)端口的具體值可以在TCP端口的合法范圍內(nèi)任意設(shè)置,為了盡量避 免修改服務(wù)端機(jī)器和客戶(hù)端機(jī)器的防火墻設(shè)置,最好將這兩個(gè)端口設(shè)置為常用端口值,如 80端口和21端口;因此,所述轉(zhuǎn)發(fā)服務(wù)器模塊執(zhí)行的步驟包括命令端口監(jiān)聽(tīng)線程處理和數(shù)據(jù)端口監(jiān)聽(tīng) 線程處理。
所述命令端口監(jiān)聽(tīng)線程處理邏輯是a.監(jiān)聽(tīng)命令端口,等待命令連接;由于命令連接中會(huì)傳遞用戶(hù)名、密碼等敏感信息,因 此,該連接采用標(biāo)準(zhǔn)的SSL/TLS傳輸層加密機(jī)制,對(duì)該連接通信進(jìn)行加密;b.收到命令連接后,進(jìn)行用戶(hù)名、密碼驗(yàn)證;用戶(hù)名和密碼是在轉(zhuǎn)發(fā)服務(wù)器模塊中通 過(guò)用戶(hù)認(rèn)證子模塊配置的,目的是為了防止未經(jīng)授權(quán)的命令訪問(wèn);c.密碼驗(yàn)證出錯(cuò),直接關(guān)閉該連接,返回到a,繼續(xù)等待新的命令連接;d.密碼驗(yàn)證成功,啟動(dòng)命令處理線程,對(duì)該命令單獨(dú)處理;采用線程方式是為了使后 續(xù)新的命令連接能及時(shí)處理。
所述命令處理線程的處理邏輯是e.判斷命令類(lèi)型;el.對(duì)于服務(wù)端服務(wù)注冊(cè)命令,保存服務(wù)注冊(cè)信息和該連接的Socket信息,返回注冊(cè) 結(jié)果信息;所述服務(wù)注冊(cè)命令包括服務(wù)注冊(cè)命令字、服務(wù)端代理ID、轉(zhuǎn)發(fā)服務(wù)器模塊用戶(hù)名、轉(zhuǎn)發(fā) 服務(wù)器模塊密碼、消息長(zhǎng)度、服務(wù)端機(jī)器描述、以及服務(wù)信息列表等信息;所述服務(wù)信息列 表中的每個(gè)服務(wù)項(xiàng)包括服務(wù)IP、服務(wù)端口、服務(wù)類(lèi)型、服務(wù)描述等字段;服務(wù)端代理ID是 對(duì)服務(wù)端代理的唯一標(biāo)識(shí)。
服務(wù)注冊(cè)命令處理完成后,該命令處理線程退出;退出前,服務(wù)端代理連接的 Socket信息,要一起保存下來(lái),后續(xù)進(jìn)行服務(wù)選擇處理時(shí)還會(huì)用來(lái)進(jìn)行命令交互;e2.對(duì)于客戶(hù)端代理服務(wù)查詢(xún)命令,返回目前注冊(cè)并且用戶(hù)有權(quán)訪問(wèn)的所有服務(wù)信息 列表,然后等待后續(xù)的服務(wù)選擇命令,直到連接斷開(kāi),才退出該線程;f.收到服務(wù)選擇命令后,根據(jù)命令中選擇的服務(wù)條目,向?qū)?yīng)的服務(wù)端代理Socket 發(fā)送服務(wù)選擇命令。
服務(wù)選擇命令的內(nèi)容包括服務(wù)選擇命令字、服務(wù)端代理ID(不使用IP是因?yàn)槎鄠€(gè) 服務(wù)端代理的IP可能相同)、服務(wù)IP、服務(wù)端口等內(nèi)容。
g.服務(wù)端代理Socket返回服務(wù)選擇命令執(zhí)行結(jié)果,如果執(zhí)行成功,會(huì)返回服務(wù) 訪問(wèn)ID值,轉(zhuǎn)發(fā)服務(wù)器模塊將該ID返回給客戶(hù)端代理;如果執(zhí)行失敗,轉(zhuǎn)發(fā)服務(wù)器模塊將 錯(cuò)誤描述信息返回給客戶(hù)端代理。
服務(wù)訪問(wèn)ID是服務(wù)端代理隨機(jī)生成的一個(gè)唯一 ID,可以使用⑶ID。轉(zhuǎn)發(fā)服務(wù)器 模塊根據(jù)該ID,對(duì)ID匹配的分別由客戶(hù)端和服務(wù)端代理建立的兩個(gè)數(shù)據(jù)連接進(jìn)行通信轉(zhuǎn)發(fā)。
h.之后繼續(xù)等待后續(xù)的服務(wù)選擇命令,直到連接斷開(kāi),才退出該線程。
所述數(shù)據(jù)端口監(jiān)聽(tīng)線程處理邏輯是 i.監(jiān)聽(tīng)數(shù)據(jù)端口,等待數(shù)據(jù)連接。
j.收到數(shù)據(jù)連接后,保存該連接Socket以及對(duì)應(yīng)的服務(wù)訪問(wèn)ID ;所述轉(zhuǎn)發(fā)服務(wù)器模塊先收到定長(zhǎng)的數(shù)據(jù)連接命令字和服務(wù)訪問(wèn)ID信息,之后是與具 體服務(wù)相關(guān)的數(shù)據(jù),所述轉(zhuǎn)發(fā)服務(wù)器模塊只解析開(kāi)頭的定長(zhǎng)數(shù)據(jù),對(duì)后面的具體服務(wù)相關(guān) 數(shù)據(jù)的具體內(nèi)容不關(guān)心,直接進(jìn)行后續(xù)轉(zhuǎn)發(fā)處理;所述數(shù)據(jù)連接命令字有“提供服務(wù)”和“訪問(wèn)服務(wù)”兩種,“提供服務(wù)”命令由服務(wù)端代 理數(shù)據(jù)連接發(fā)送,“訪問(wèn)服務(wù)”命令由客戶(hù)端代理數(shù)據(jù)連接發(fā)送; k.比較服務(wù)ID;如果沒(méi)有找到與該連接對(duì)應(yīng)的服務(wù)訪問(wèn)ID,表明匹配的連接還沒(méi)有建立,保存連接 Socket和服務(wù)訪問(wèn)ID信息后,轉(zhuǎn)到i,繼續(xù)等待新的數(shù)據(jù)連接;如果某個(gè)“提供服務(wù)”連接與某個(gè)“訪問(wèn)服務(wù)”有相同的服務(wù)訪問(wèn)ID,表明這兩個(gè)連接 對(duì)應(yīng)的是同一個(gè)服務(wù)訪問(wèn)請(qǐng)求,傳入兩個(gè)連接的Socket信息并記為SocketSl和SocketS2, 啟動(dòng)通信轉(zhuǎn)發(fā)線程,然后轉(zhuǎn)到i,繼續(xù)等待新的數(shù)據(jù)連接。
所述通信轉(zhuǎn)發(fā)線程中對(duì)兩個(gè)Socket Sl和SocketS2的通信轉(zhuǎn)發(fā)邏輯是 1.調(diào)用select函數(shù),檢測(cè)SocketSl或SocketS2的數(shù)據(jù)是否可讀?m.如果SocketSl可讀,從SocketSl讀取數(shù)據(jù)發(fā)送到SocketS2 ;如果SocketS2可讀, 從SocketS2讀取數(shù)據(jù)發(fā)送到SocketSl ;η.如果沒(méi)有錯(cuò)誤,繼續(xù)執(zhí)行步驟1,進(jìn)行循環(huán)中轉(zhuǎn)處理;ο.如果SocketSl或者SocketS2出現(xiàn)任何錯(cuò)誤,或者任何一方連接斷開(kāi),關(guān)閉 SocketSl和SocketS2,退出中轉(zhuǎn)線程。
轉(zhuǎn)發(fā)服務(wù)器模塊提供用戶(hù)管理功能。用戶(hù)分為兩類(lèi)"服務(wù)管理員用戶(hù)“和“服 務(wù)訪問(wèn)用戶(hù)"。服務(wù)管理員用戶(hù)可以在轉(zhuǎn)發(fā)服務(wù)器模塊中手動(dòng)配置,或者采用用戶(hù)自注冊(cè)方 式(需要審核后注冊(cè)用戶(hù)才能生效)。服務(wù)端代理在注冊(cè)服務(wù)時(shí)需要提供服務(wù)管理員的用戶(hù) 名、密碼。使用服務(wù)管理員用戶(hù)名、密碼能訪問(wèn)其注冊(cè)的所有服務(wù)。服務(wù)管理員用戶(hù)能夠登 錄轉(zhuǎn)發(fā)服務(wù)器模塊的用戶(hù)管理模塊,新建服務(wù)訪問(wèn)用戶(hù),并且設(shè)置用戶(hù)能訪問(wèn)哪些服務(wù)。用戶(hù)密碼和訪問(wèn)權(quán)限驗(yàn)證工作都在轉(zhuǎn)發(fā)服務(wù)器模塊中進(jìn)行,但用戶(hù)能訪問(wèn)哪些服務(wù),是由服 務(wù)提供方的服務(wù)管理員決定的,而不是由轉(zhuǎn)發(fā)服務(wù)器模塊管理員決定。
所述服務(wù)端代理程序處理模塊是一個(gè)后臺(tái)服務(wù)模塊,該處理模塊將服務(wù)端機(jī)器作 為客戶(hù)端連接轉(zhuǎn)發(fā)服務(wù)器模塊,同時(shí)連接本機(jī)或者網(wǎng)絡(luò)中其他本機(jī)上提供的服務(wù),實(shí)現(xiàn)服 務(wù)注冊(cè)和服務(wù)通訊中轉(zhuǎn)功能。
所述服務(wù)端代理程序處理模塊支持Linux、Windows等多種平臺(tái),如果與具體服務(wù) 部署在一起,只能部署在服務(wù)支持的系統(tǒng)平臺(tái)。
在所述服務(wù)端代理程序處理模塊中,需要配置服務(wù)端代理程序處理模塊可以訪問(wèn) 的服務(wù)信息列表,包括服務(wù)IP (默認(rèn)是本機(jī)IP =127. 0. 0. 1)、服務(wù)端口、服務(wù)描述等。
在一個(gè)子網(wǎng)中,可以在多臺(tái)機(jī)器上配置獨(dú)立的服務(wù)端代理程序處理模塊,這樣大 大提高了系統(tǒng)的容錯(cuò)性。
所述服務(wù)端代理程序處理模塊處理邏輯是 服務(wù)端代理程序處理啟動(dòng);al.連接轉(zhuǎn)發(fā)服務(wù)器模塊命令端口,發(fā)送服務(wù)注冊(cè)命令;服務(wù)注冊(cè)命令的內(nèi)容參考轉(zhuǎn)發(fā)服務(wù)器模塊處理邏輯中對(duì)服務(wù)注冊(cè)命令的說(shuō)明,其中服 務(wù)端代理ID可以是服務(wù)端代理程序處理模塊自動(dòng)生成的一個(gè)唯一 ID,可以使用⑶ID ; a2.服務(wù)注冊(cè)成功后,等待接收服務(wù)選擇命令,直到程序被手動(dòng)關(guān)閉; a3.收到服務(wù)選擇命令后,連接服務(wù)選擇命令中對(duì)應(yīng)的服務(wù),創(chuàng)建Socket Si,如果連 接出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命令;a4.如果連接服務(wù)成功,采用標(biāo)準(zhǔn)的GUID方式生成隨機(jī)的服務(wù)ID ;a5.連接轉(zhuǎn)發(fā)服務(wù)器模塊數(shù)據(jù)端口,創(chuàng)建Socket S2,發(fā)送“提供服務(wù)”命令字+服務(wù)ID。
a6.如果連接或發(fā)送出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命 令;a7.連接并發(fā)送成功后,向服務(wù)選擇命令返回服務(wù)ID信息,啟動(dòng)線程處理Socket Sl 和Socket S2這兩個(gè)Socket的服務(wù)通信轉(zhuǎn)發(fā)。線程啟動(dòng)后,執(zhí)行步驟a2,繼續(xù)等待接收服 務(wù)選擇命令;所述服務(wù)通信轉(zhuǎn)發(fā)處理邏輯,與轉(zhuǎn)發(fā)服務(wù)器模塊的通信轉(zhuǎn)發(fā)邏輯是一樣的。
alO.調(diào)用select函數(shù),檢測(cè)SocketSl或SocketS2的數(shù)據(jù)是否可讀。
all.如果 SocketSl 可讀,從 SocketSl 讀取數(shù)據(jù)發(fā)送到 SocketS2 ;如果 SocketS2 可讀,從SocketS2讀取數(shù)據(jù)發(fā)送到SocketSl ;al2.如果沒(méi)有錯(cuò)誤,繼續(xù)執(zhí)行步驟all,進(jìn)行循環(huán)中轉(zhuǎn)處理;al3.如果SocketSl或者SocketS2出現(xiàn)任何錯(cuò)誤,或者任何一方連接斷開(kāi),關(guān)閉 SocketSl和SocketS2,退出中轉(zhuǎn)線程。
在上述流程基礎(chǔ)上經(jīng)過(guò)簡(jiǎn)單的修改,所述服務(wù)端代理程序處理模塊就可以支持向 多個(gè)不同轉(zhuǎn)發(fā)服務(wù)器模塊同時(shí)注冊(cè)功能程序啟動(dòng)后,對(duì)配置的每個(gè)轉(zhuǎn)發(fā)服務(wù)器模塊分別 啟動(dòng)一個(gè)線程,在每個(gè)線程中執(zhí)行上述流程步驟,即可支持多公共轉(zhuǎn)發(fā)服務(wù)器模塊方式。這 樣客戶(hù)端代理程序處理模塊通過(guò)不同的轉(zhuǎn)發(fā)服務(wù)器模塊,都能訪問(wèn)服務(wù)端代理程序處理模 塊中轉(zhuǎn)的服務(wù),提供了系統(tǒng)的容錯(cuò)性。
所述客戶(hù)端代理程序處理模塊是一個(gè)有界面的程序模塊,作為客戶(hù)端與公共轉(zhuǎn)發(fā) 服務(wù)器模塊連接,實(shí)現(xiàn)服務(wù)列表展現(xiàn)、選擇服務(wù)、訪問(wèn)服務(wù)等功能。
用戶(hù)在客戶(hù)端代理程序處理模塊的服務(wù)列表中選擇服務(wù)后,服務(wù)端代理程序處理 模塊會(huì)啟動(dòng)服務(wù)對(duì)應(yīng)的客戶(hù)端程序,與轉(zhuǎn)發(fā)服務(wù)器模塊的數(shù)據(jù)端口連接,通過(guò)轉(zhuǎn)發(fā)服務(wù)器 模塊的中轉(zhuǎn),以及服務(wù)端代理的中轉(zhuǎn),實(shí)現(xiàn)對(duì)服務(wù)的訪問(wèn)功能。
系統(tǒng)要求客戶(hù)端與轉(zhuǎn)發(fā)服務(wù)器模塊的數(shù)據(jù)連接建立后,先向轉(zhuǎn)發(fā)服務(wù)器模塊發(fā)送 “服務(wù)訪問(wèn)”命令字+對(duì)應(yīng)的服務(wù)訪問(wèn)ID,便于讓轉(zhuǎn)發(fā)服務(wù)器模塊將該數(shù)據(jù)連接與對(duì)應(yīng)的服 務(wù)端代理數(shù)據(jù)連接匹配,進(jìn)行通信轉(zhuǎn)發(fā)。
但客戶(hù)端程序一般都是現(xiàn)有的程序,大多都是沒(méi)有源代碼的,因此不能直接對(duì)客 戶(hù)端程序進(jìn)行修改??梢圆捎肳insock SPI提供的Socket接口,或者采用通用的Windows API Hook方法,寫(xiě)一個(gè)Socket Hook模塊,通過(guò)該模塊來(lái)截獲包括客戶(hù)端程序在內(nèi)的所有網(wǎng) 絡(luò)通信程序?qū)ocket connect函數(shù)的調(diào)用。Socket Hook模塊與客戶(hù)端代理程序之間有通 信,該模塊判斷如果調(diào)用connect的是客戶(hù)端代理程序啟動(dòng)的客戶(hù)端子進(jìn)程,在connect成 功后,首先向服務(wù)端發(fā)送“服務(wù)訪問(wèn)”命令字+對(duì)應(yīng)的服務(wù)訪問(wèn)ID。也可以通過(guò)連接中轉(zhuǎn)方 式實(shí)現(xiàn)上述功能,客戶(hù)端代理啟動(dòng)客戶(hù)端程序連接客戶(hù)端代理監(jiān)聽(tīng)的本地端口,通信數(shù)據(jù) 經(jīng)由客戶(hù)端代理轉(zhuǎn)發(fā)給轉(zhuǎn)發(fā)服務(wù)器模塊,但多一次通信轉(zhuǎn)發(fā)效率上會(huì)稍有降低,因此該方 案推薦使用Socket Hook模塊的方式。
所述客戶(hù)端代理程序處理模塊的處理邏輯是 客戶(hù)端代理處理啟動(dòng);bl.連接轉(zhuǎn)發(fā)服務(wù)器模塊命令端口,發(fā)送服務(wù)查詢(xún)命令; b2.根據(jù)服務(wù)查詢(xún)命令的返回,顯示可以訪問(wèn)的服務(wù)列表; b3.等待用戶(hù)選擇某個(gè)服務(wù);b4.用戶(hù)選擇訪問(wèn)后,發(fā)送服務(wù)選擇命令;如果返回失敗,提示錯(cuò)誤信息,執(zhí)行步驟 b3,允許用戶(hù)繼續(xù)選擇其他服務(wù),或者退出程序;所述服務(wù)選擇命令的具體內(nèi)容參考轉(zhuǎn)發(fā)服務(wù)器模塊處理邏輯中對(duì)服務(wù)選擇命令的描述。
b5.服務(wù)選擇命令返回成功后,保存返回的服務(wù)訪問(wèn)ID;b6.注冊(cè)Socket Hook模塊,使該模塊能截獲后續(xù)客戶(hù)端程序中對(duì)socket connect函 數(shù)的調(diào)用;b7.啟動(dòng)服務(wù)對(duì)應(yīng)的客戶(hù)端程序子進(jìn)程,傳入公共轉(zhuǎn)發(fā)服務(wù)器模塊的IP和數(shù)據(jù)端口 作為連接參數(shù)。子進(jìn)程啟動(dòng)后,主程序執(zhí)行步驟b3,允許用戶(hù)繼續(xù)選擇其他服務(wù);b8.客戶(hù)端程序會(huì)調(diào)用socket connect函數(shù)與轉(zhuǎn)發(fā)服務(wù)器模塊數(shù)據(jù)端口建立連接,由 于注冊(cè)了 Socket Hook模塊,客戶(hù)端對(duì)socket connect函數(shù)的調(diào)用會(huì)進(jìn)入到Socket Hook 模塊自定義connect函數(shù)中;下面是Socket Hook模塊處理邏輯。
cl. Socket Hook模塊首先調(diào)用操作系統(tǒng)自身的connect函數(shù);Socket Hook模塊獲取當(dāng)前執(zhí)行connect函數(shù)的進(jìn)程ID,向客戶(hù)端代理模塊查詢(xún)?cè)撨M(jìn) 程ID是否是由客戶(hù)端代理模塊啟動(dòng)的客戶(hù)端子進(jìn)程。如果不是,該模塊直接返回;c2.如果是由客戶(hù)端代理模塊啟動(dòng)的客戶(hù)端子進(jìn)程,客戶(hù)端代理模塊會(huì)同時(shí)返回該子進(jìn)程對(duì)應(yīng)的服務(wù)訪問(wèn)ID,Socket Hook模塊向服務(wù)端發(fā)送“服務(wù)訪問(wèn)”命令字+對(duì)應(yīng)的服務(wù) 訪問(wèn)ID ;c3.該模塊返回,后續(xù)繼續(xù)執(zhí)行客戶(hù)端程序的內(nèi)部處理邏輯,直到用戶(hù)關(guān)閉客戶(hù)端程 序,該子進(jìn)程退出。
最后應(yīng)說(shuō)明的是,以上僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳布 置方案對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù) 方案進(jìn)行修改或者等同替換(例如部署2臺(tái)或2臺(tái)以上的公共轉(zhuǎn)發(fā)服務(wù)器模塊,以提高系 統(tǒng)整體工作的可靠性;或者為某些保密性要求高的用戶(hù)提供專(zhuān)屬使用的轉(zhuǎn)發(fā)服務(wù)器模塊; 在部分實(shí)時(shí)性要求高的應(yīng)用場(chǎng)合,必要的情況下可以為某些客戶(hù)內(nèi)網(wǎng)的每一個(gè)服務(wù)端設(shè)備 配置獨(dú)立的服務(wù)端代理程序處理模塊等),而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在于,包括轉(zhuǎn)發(fā)服務(wù)器模 塊、服務(wù)端代理和客戶(hù)端機(jī)器,所述方法的步驟包括至少有一個(gè)提供數(shù)據(jù)轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)服務(wù)器模塊建立在TCP網(wǎng)絡(luò)中,轉(zhuǎn)發(fā)服務(wù)器模塊中設(shè) 置有一個(gè)TCP網(wǎng)絡(luò)IP地址、設(shè)置有命令端口和數(shù)據(jù)端口、設(shè)置有一個(gè)數(shù)據(jù)轉(zhuǎn)發(fā)器和一個(gè)用 戶(hù)認(rèn)證子模塊,轉(zhuǎn)發(fā)服務(wù)器模塊始終監(jiān)聽(tīng)命令端口和數(shù)據(jù)端口,準(zhǔn)備接收服務(wù)端代理和客 戶(hù)端機(jī)器發(fā)起的連接,所述客戶(hù)端機(jī)器包括客戶(hù)端代理和客戶(hù)端;至少有一個(gè)內(nèi)網(wǎng)服務(wù)端代理通過(guò)所述命令端口和數(shù)據(jù)端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立連 接,所述內(nèi)網(wǎng)服務(wù)端代理至少連接一個(gè)內(nèi)網(wǎng)服務(wù)端的實(shí)際服務(wù);至少有一個(gè)外網(wǎng)客戶(hù)端機(jī)器的客戶(hù)端代理通過(guò)所述命令端口與轉(zhuǎn)發(fā)服務(wù)器模塊建立 連接,同一個(gè)客戶(hù)端機(jī)器的客戶(hù)端與轉(zhuǎn)發(fā)服務(wù)器模塊的數(shù)據(jù)端口建立連接。
2.根據(jù)權(quán)利要求1所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述轉(zhuǎn)發(fā)服務(wù)器模塊執(zhí)行的步驟包括命令端口監(jiān)聽(tīng)線程處理和數(shù)據(jù)端口監(jiān)聽(tīng)線程處 理;所述命令端口監(jiān)聽(tīng)線程處理步驟包括收到命令連接后,通過(guò)用戶(hù)認(rèn)證子模塊進(jìn)行用 戶(hù)名、密碼驗(yàn)證;密碼驗(yàn)證出錯(cuò),關(guān)閉該連接,繼續(xù)等待新的命令連接;密碼驗(yàn)證成功,啟動(dòng) 命令處理線程;所述數(shù)據(jù)端口監(jiān)聽(tīng)線程處理步驟包括先接收定長(zhǎng)的數(shù)據(jù)連接命令字和服務(wù)訪問(wèn)ID 信息,然后接收與具體服務(wù)相關(guān)的數(shù)據(jù),所述轉(zhuǎn)發(fā)服務(wù)器模塊只解析開(kāi)頭的定長(zhǎng)數(shù)據(jù),然后 直接進(jìn)行轉(zhuǎn)發(fā)處理,所述數(shù)據(jù)連接命令字有“提供服務(wù)”和“訪問(wèn)服務(wù)”,“提供服務(wù)”命令由 服務(wù)端代理數(shù)據(jù)連接發(fā)送,“訪問(wèn)服務(wù)”命令由客戶(hù)端數(shù)據(jù)連接發(fā)送,如果“提供服務(wù)”連接 與“訪問(wèn)服務(wù)”有相同的服務(wù)訪問(wèn)ID,表明這兩個(gè)連接對(duì)應(yīng)的是同一個(gè)服務(wù)訪問(wèn)請(qǐng)求,傳入 兩個(gè)連接的Socket信息并記為SocketSl和SocketS2,啟動(dòng)通信轉(zhuǎn)發(fā)線程。
3.根據(jù)權(quán)利要求2所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述轉(zhuǎn)發(fā)服務(wù)器模塊命令處理線程的步驟是a.判斷命令類(lèi)型;對(duì)于服務(wù)端代理服務(wù)注冊(cè)命令保存服務(wù)注冊(cè)信息和該連接的 Socket信息,返回注冊(cè)結(jié)果信息;對(duì)于客戶(hù)端代理服務(wù)查詢(xún)命令返回目前注冊(cè)的所有服 務(wù)信息列表,然后等待后續(xù)的服務(wù)選擇命令;b.收到服務(wù)選擇命令后,根據(jù)命令中選擇的服務(wù)條目,向?qū)?yīng)的服務(wù)端代理Socket發(fā) 送服務(wù)選擇命令;c.服務(wù)端代理Socket返回服務(wù)選擇命令執(zhí)行結(jié)果,如果執(zhí)行成功,返回服務(wù)訪問(wèn)ID 值,轉(zhuǎn)發(fā)服務(wù)器模塊將該ID返回給客戶(hù)端代理;如果執(zhí)行失敗,轉(zhuǎn)發(fā)服務(wù)器模塊將錯(cuò)誤描 述信息返回給客戶(hù)端代理;d.之后繼續(xù)等待后續(xù)的服務(wù)選擇命令,直到退出該線程。
4.根據(jù)權(quán)利要求1所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述命令端口與服務(wù)端代理和客戶(hù)端代理的連接采用SSL/TLS傳輸層加密機(jī)制。
5.根據(jù)權(quán)利要求1所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述服務(wù)端代理執(zhí)行的步驟包括al.連接中轉(zhuǎn)服務(wù)器命令端口,發(fā)送服務(wù)注冊(cè)命令;a2.服務(wù)注冊(cè)成功后,等待接收服務(wù)選擇命令,直到程序被手動(dòng)關(guān)閉;a3.收到服務(wù)選擇命令后,連接服務(wù)選擇命令中對(duì)應(yīng)的服務(wù),創(chuàng)建Socket Si,如果連 接出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命令;a4.如果連接服務(wù)成功,采用標(biāo)準(zhǔn)的GUID方式生成隨機(jī)的服務(wù)ID ; a5.創(chuàng)建Socket S2,發(fā)送“提供服務(wù)”命令字+服務(wù)ID ;a6.如果連接或發(fā)送出錯(cuò),返回錯(cuò)誤信息,執(zhí)行步驟a2,繼續(xù)等待接收服務(wù)選擇命令; a7.連接并發(fā)送成功后,向服務(wù)選擇命令返回服務(wù)ID信息,啟動(dòng)線程處理Socket Sl 和Socket S2的服務(wù)通信轉(zhuǎn)發(fā)。
6.根據(jù)權(quán)利要求5所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述服務(wù)通信轉(zhuǎn)發(fā)的步驟是alO.調(diào)用select函數(shù),檢測(cè)SocketSl或SocketS2的數(shù)據(jù)是否可讀; all. 如果SocketSl可讀,從SocketSl讀取數(shù)據(jù)發(fā)送到SocketS2 ;如果SocketS2可 讀,從SocketS2讀取數(shù)據(jù)發(fā)送到SocketSl ;al2.如果沒(méi)有錯(cuò)誤,繼續(xù)執(zhí)行步驟alO,進(jìn)行循環(huán)中轉(zhuǎn)處理;al3.如果SocketSl或者SocketS2出現(xiàn)任何錯(cuò)誤,或者任何一方連接斷開(kāi),關(guān)閉 SocketSl和SocketS2,退出中轉(zhuǎn)線程。
7.根據(jù)權(quán)利要求1所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述客戶(hù)端代理執(zhí)行的步驟包括bl.連接轉(zhuǎn)發(fā)服務(wù)器模塊命令端口,發(fā)送服務(wù)查詢(xún)命令; b2.根據(jù)服務(wù)查詢(xún)命令的返回,顯示可以訪問(wèn)的服務(wù)列表; b3.等待用戶(hù)選擇某個(gè)服務(wù);b4.用戶(hù)選擇訪問(wèn)后,發(fā)送服務(wù)選擇命令,如果返回失敗,提示錯(cuò)誤信息,執(zhí)行步驟b3, 允許用戶(hù)繼續(xù)選擇其他服務(wù),或者退出程序;b5.服務(wù)選擇命令返回成功后,保存返回的服務(wù)訪問(wèn)ID;b6.注冊(cè)Socket Hook模塊,使該模塊能截獲后續(xù)客戶(hù)端程序中對(duì)socket connect函 數(shù)的調(diào)用;b7.啟動(dòng)服務(wù)對(duì)應(yīng)的客戶(hù)端程序子進(jìn)程,傳入轉(zhuǎn)發(fā)服務(wù)器模塊的IP和數(shù)據(jù)端口作為 連接參數(shù),子進(jìn)程啟動(dòng)后,主程序執(zhí)行步驟b3,允許用戶(hù)繼續(xù)選擇其他服務(wù)。
8.根據(jù)權(quán)利要求7所述的一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,其特征在 于,所述Socket Hook模塊執(zhí)行的步驟包括,截獲客戶(hù)端程序中對(duì)socket connect函數(shù)的 調(diào)用后,首先調(diào)用客戶(hù)端操作系統(tǒng)自身的connect函數(shù);然后獲取當(dāng)前執(zhí)行connect函數(shù) 的進(jìn)程ID,向客戶(hù)端代理查詢(xún)?cè)撨M(jìn)程ID是否是由客戶(hù)端代理啟動(dòng)的客戶(hù)端子進(jìn)程,如果不 是,該模塊直接返回到主程序;如果是由客戶(hù)端代理啟動(dòng)的客戶(hù)端子進(jìn)程,客戶(hù)端代理會(huì)同 時(shí)返回該子進(jìn)程對(duì)應(yīng)的服務(wù)訪問(wèn)ID,Socket Hook模塊向服務(wù)端發(fā)送"服務(wù)訪問(wèn)"命令字 +對(duì)應(yīng)的服務(wù)訪問(wèn)ID,然后返回到主程序。
全文摘要
本發(fā)明涉及一種將TCP網(wǎng)絡(luò)通信服務(wù)端轉(zhuǎn)換為客戶(hù)端的方法,包括建立在TCP網(wǎng)絡(luò)中提供數(shù)據(jù)轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)服務(wù)器,至少有一個(gè)內(nèi)網(wǎng)服務(wù)端機(jī)器通過(guò)命令端口和數(shù)據(jù)端口與轉(zhuǎn)發(fā)服務(wù)器建立連接;至少有一個(gè)外網(wǎng)客戶(hù)端機(jī)器通過(guò)所述命令端口和數(shù)據(jù)端口與轉(zhuǎn)發(fā)服務(wù)器建立連接;轉(zhuǎn)發(fā)服務(wù)器中設(shè)置有一個(gè)TCP網(wǎng)絡(luò)IP地址、設(shè)置有命令端口和數(shù)據(jù)端口,轉(zhuǎn)發(fā)服務(wù)器始終監(jiān)聽(tīng)命令端口和數(shù)據(jù)端口;本發(fā)明轉(zhuǎn)發(fā)服務(wù)器只負(fù)責(zé)服務(wù)注冊(cè)、服務(wù)查詢(xún)、通信中轉(zhuǎn)等處理,內(nèi)網(wǎng)服務(wù)端機(jī)器不直接對(duì)外網(wǎng)暴露服務(wù),提高了內(nèi)網(wǎng)安全性,不再需要配置固定IP,減少了固定IP這一寶貴資源;本發(fā)明是基于TCP通信轉(zhuǎn)發(fā)的通用實(shí)現(xiàn)方法,現(xiàn)有的服務(wù)端、客戶(hù)端軟件不需要修改,可以充分利用已有的軟件資產(chǎn)。
文檔編號(hào)H04L29/12GK102035904SQ20101058295
公開(kāi)日2011年4月27日 申請(qǐng)日期2010年12月10日 優(yōu)先權(quán)日2010年12月10日
發(fā)明者姚威, 王彥彬, 王雷, 鄧偉 申請(qǐng)人:北京中科大洋科技發(fā)展股份有限公司