一種Telnet代理轉(zhuǎn)發(fā)機(jī)制的制作方法
【專利摘要】本發(fā)明公開一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,包括主進(jìn)程完成狀態(tài)的初始化并建立連接線程步驟和連接線程建立連接并轉(zhuǎn)發(fā)消息步驟,還包括socket連接線程對(duì)轉(zhuǎn)發(fā)數(shù)據(jù)的監(jiān)控步驟,具體為:(1)當(dāng)接到回車指令時(shí),調(diào)用函數(shù)解析出正確的命令;(2)調(diào)用命令過(guò)濾模塊,判斷是否允許執(zhí)行該命令,如果允許將解析出的正確命令發(fā)送給監(jiān)控程序,如果不允許,給客戶端轉(zhuǎn)發(fā)不允許執(zhí)行命令的信息;(3)Thread_loop循環(huán)處理所有的讀寫事件,直到socket連接關(guān)閉。本發(fā)明對(duì)TELNET會(huì)話命令分析、會(huì)話監(jiān)測(cè)、切斷、回放功能,在運(yùn)維過(guò)程中實(shí)現(xiàn)了事前預(yù)防、事中干預(yù)和事后分析處理,在一定程度上幫助企業(yè)提升內(nèi)部風(fēng)險(xiǎn)控制水平。
【專利說(shuō)明】一種Te I net代理轉(zhuǎn)發(fā)機(jī)制
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,具體涉及一種對(duì)會(huì)話進(jìn)行監(jiān)測(cè)的Telnet 代理轉(zhuǎn)發(fā)機(jī)制。
【背景技術(shù)】
[0002] Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程登陸服務(wù)的標(biāo)準(zhǔn)協(xié)議和 主要方式。它為用戶提供了在本地計(jì)算機(jī)上完成遠(yuǎn)程主機(jī)工作的能力。在終端使用者的電 腦上使用telnet程序,用它連接到服務(wù)器。終端使用者可以在telnet程序中輸入命令,這 些命令會(huì)在服務(wù)器上運(yùn)行,就像直接在服務(wù)器的控制臺(tái)上輸入一樣??梢栽诒镜鼐湍芸刂?服務(wù)器。要開始一個(gè)telnet會(huì)話,必須輸入用戶名和密碼來(lái)登錄服務(wù)器。Telnet是常用的 遠(yuǎn)程控制Web服務(wù)器的方法。Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程登陸 服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。它為用戶提供了在本地計(jì)算機(jī)上完成遠(yuǎn)程主機(jī)工作的能力。 在終端使用者的電腦上使用telnet程序,用它連接到服務(wù)器。終端使用者可以在telnet程 序中輸入命令,這些命令會(huì)在服務(wù)器上運(yùn)行,就像直接在服務(wù)器的控制臺(tái)上輸入一樣。可以 在本地就能控制服務(wù)器。要開始一個(gè)telnet會(huì)話,必須輸入用戶名和密碼來(lái)登錄服務(wù)器。 Telnet是常用的遠(yuǎn)程控制Web服務(wù)器的方法。
[0003] 然而通過(guò)Telnet協(xié)議鏈接設(shè)備是明文傳送的,具有很大的安全隱患。因此要求我 們?cè)诖磙D(zhuǎn)發(fā)的同時(shí),也要有相應(yīng)的TELNET會(huì)話命令分析、會(huì)話監(jiān)測(cè)、切斷、回放的過(guò)程。
【發(fā)明內(nèi)容】
[0004] 發(fā)明目的:本發(fā)明目的在于針對(duì)現(xiàn)有技術(shù)的不足,提供一種有相應(yīng)的TELNET會(huì)話 命令分析、會(huì)話監(jiān)測(cè)、切斷、回放的過(guò)程的Telnet代理轉(zhuǎn)發(fā)機(jī)制。
[0005] 技術(shù)方案:本發(fā)明所述一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,在服務(wù)器和客戶端之間建立 Telnet轉(zhuǎn)發(fā)機(jī)制,包括Telnet會(huì)話主進(jìn)程完成狀態(tài)的初始化并建立socket連接線程步驟 和socket連接線程建立連接并轉(zhuǎn)發(fā)消息步驟,還包括socket連接線程對(duì)轉(zhuǎn)發(fā)數(shù)據(jù)的監(jiān)控 步驟,具體為:
[0006] (1)當(dāng)接到回車指令時(shí),調(diào)用vtlOOline來(lái)判斷buffer的含義,解析出正確的命 令;
[0007] (2)調(diào)用命令過(guò)濾模塊,判斷是否允許執(zhí)行該命令,如果允許調(diào)用proxy_data_ write,將解析出的正確命令發(fā)送給監(jiān)控程序,如果不允許,給客戶端轉(zhuǎn)發(fā)不允許執(zhí)行命令 的信息,給服務(wù)器轉(zhuǎn)發(fā)ctrl+c,不讓服務(wù)器執(zhí)行這條命令;
[0008] (3)Thread_loop循環(huán)處理所有的讀寫事件,直到socket連接關(guān)閉。
[0009] 本發(fā)明技術(shù)方案的進(jìn)一步限定為,所述Telnet會(huì)話主進(jìn)程完成狀態(tài)的初始化并 建立socket連接步驟具體方法為:
[0010] (1)調(diào)用 proxy_mod_init,proxy_session_init,proxy_data_init 三個(gè)函數(shù)來(lái)初 始化程序的模式、會(huì)話、數(shù)據(jù)信息,并完成互斥操作初始化及處理信號(hào)操作;
[0011 ] (2)調(diào)用socket函數(shù)創(chuàng)建socket,并調(diào)用bind, listen來(lái)綁定地址及監(jiān)聽端口;
[0012] (3)監(jiān)聽是否有新的socket連接請(qǐng)求,如果有新的連接請(qǐng)求,則調(diào)用accept函數(shù) 接受請(qǐng)求,并創(chuàng)建一個(gè)新線程來(lái)處理這個(gè)連接請(qǐng)求;
[0013] (4)當(dāng)主線程要結(jié)束時(shí),調(diào)用 proxy_mod_destroy, proxy_session_ destroy, proxy_data_destroy三個(gè)函數(shù)來(lái)釋放掉相關(guān)資源。
[0014] 進(jìn)一步地,所述socket連接線程建立連接步驟具體為:
[0015] (1) socket 連接線程調(diào)用函數(shù) pthread_mutex_lock 和 pthread_mutex_unlock 來(lái) 進(jìn)行互斥操作,然后給客戶端發(fā)user和password提示符,提示用戶輸入用戶名和密碼,再 調(diào)用函數(shù) get_remote_line ;
[0016] (2)當(dāng)用戶輸入時(shí),解析這個(gè)輸入,將信息轉(zhuǎn)換成telnet的格式,再調(diào)用parse_ iac2函數(shù),判斷通信雙方協(xié)商的狀態(tài);
[0017] ⑶得到有效的用戶名和密碼后,調(diào)用proxy_auth_check來(lái)驗(yàn)證是否正確,如果 不正確,直接斷開telnet連接,如果正確,則調(diào)用socket和connect函數(shù)連接到真正的服 務(wù)器。
[0018] 進(jìn)一步地,所述socket連接線程轉(zhuǎn)發(fā)信息步驟具體為:
[0019] (1) socket線程調(diào)用函數(shù)deVice_l〇gin_l〇〇p跟服務(wù)器進(jìn)行通信,然后調(diào)用 threacLloop函數(shù)處理所有的讀寫事件,如果有事件發(fā)生,則根據(jù)序號(hào)對(duì)每個(gè)事件分別進(jìn)行 處理;
[0020] (2)處理過(guò)程調(diào)用handle_message函數(shù),首先調(diào)用recv函數(shù)來(lái)接收buffer,之后 判斷發(fā)信息者的socket類型,如果是客戶端所發(fā),則判斷buffer命令的類型,并賦予相應(yīng) 的標(biāo)識(shí)位,之后把buffer轉(zhuǎn)發(fā)給服務(wù)器。
[0021] 進(jìn)一步地,上述Telnet轉(zhuǎn)發(fā)機(jī)制的會(huì)話過(guò)程中,對(duì)命令的解析采用如下方法:
[0022] (1)初始化一個(gè)有效的待解匹配的終端控制碼表;
[0023] (2)對(duì)緩沖區(qū)的字符逐個(gè)進(jìn)行解析,當(dāng)解析的字符匹配了某個(gè)終端控制碼后,就按 照相應(yīng)的終端控制碼的功能對(duì)輸出緩沖區(qū)進(jìn)行處理;
[0024] (3)如果當(dāng)前處理的字符不是控制碼,則將其記錄到輸出緩沖區(qū)中;
[0025] (4)當(dāng)輸入緩沖區(qū)處理完成之后,根據(jù)當(dāng)前輸出緩沖區(qū)以及光標(biāo)的位置輸出有效 的命令內(nèi)容。
[0026] 有益效果:本發(fā)明提供的一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,現(xiàn)了在運(yùn)維人員對(duì)目標(biāo)服務(wù) 器進(jìn)行運(yùn)維操作中,對(duì)TELNET會(huì)話命令分析、會(huì)話監(jiān)測(cè)、切斷、回放功能,這樣在運(yùn)維過(guò)程 中實(shí)現(xiàn)了事前預(yù)防、事中干預(yù)和事后分析處理。本發(fā)明會(huì)嵌入到運(yùn)維審計(jì)的堡壘機(jī)中,在一 定程度上幫助企業(yè)提升內(nèi)部風(fēng)險(xiǎn)控制水平。
【專利附圖】
【附圖說(shuō)明】
[0027] 圖1為本發(fā)明提供的telnet會(huì)話代理模塊的結(jié)構(gòu)示意圖;
[0028] 圖2為本發(fā)明提供的Telnet代理轉(zhuǎn)發(fā)機(jī)制的工作流程圖;
[0029] 圖3為本發(fā)明提供的Tlenet代理轉(zhuǎn)發(fā)機(jī)制中會(huì)話解析算法的流程圖。
【具體實(shí)施方式】
[0030] 下面通過(guò)附圖對(duì)本發(fā)明技術(shù)方案進(jìn)行詳細(xì)說(shuō)明,但是本發(fā)明的保護(hù)范圍不局限于 所述實(shí)施例。
[0031] 實(shí)施例1 :Telnet是一種較簡(jiǎn)單的遠(yuǎn)程登錄協(xié)議,它的整個(gè)過(guò)程不需要加密,但是 應(yīng)用相當(dāng)廣泛,可以工作在任何主機(jī)或任何終端之間,這其中是靠 NVT(網(wǎng)絡(luò)虛擬終端)來(lái) 實(shí)現(xiàn)。NVT是虛擬設(shè)備,連接的雙方,即客戶機(jī)和服務(wù)器,都必須把他們的物理終端和NVT進(jìn) 行相互轉(zhuǎn)換。
[0032] 術(shù)語(yǔ)NVT ACSII代表7比特的ACSII字符集。每個(gè)7比特的字符都以8比特格式 發(fā)送,最高位比特為0。Telnet通信時(shí),要發(fā)送字節(jié)Oxff,這個(gè)字節(jié)叫做IAC (作為命令來(lái)解 釋)。
[0033] 在Telnet連接時(shí),雙方首先進(jìn)行交互的信息是選項(xiàng)協(xié)商數(shù)據(jù)。選項(xiàng)協(xié)商是對(duì)稱 的,也就是說(shuō)任何一方都可以主動(dòng)發(fā)送選項(xiàng)協(xié)商請(qǐng)求給對(duì)方。對(duì)于任何給定的選項(xiàng),連接的 任何一方都可以發(fā)送下面4種請(qǐng)求的任意一個(gè)請(qǐng)求:(l)will :發(fā)送方本身將激活(enable) 選項(xiàng)(2) do :發(fā)送方想叫接收端激活選項(xiàng)(3) wont :發(fā)送方本身想禁止選項(xiàng)(4) don't :發(fā)送 方想讓接收端去禁止選項(xiàng)。選項(xiàng)協(xié)商需要3個(gè)字節(jié):一個(gè)IAC字節(jié),接著一個(gè)字節(jié)是will, do, wont, don' t這四者之一,最后一個(gè)ID字節(jié)指明激活或禁止選項(xiàng)。
[0034] 而有些選項(xiàng)不是僅僅用激活或禁止就能夠表達(dá)的,指定終端類型就是一個(gè)例子, 客戶進(jìn)程必須發(fā)送用一個(gè)ASCII字符串來(lái)表示終端類型,為了處理這種選項(xiàng),我們必須定 義子選項(xiàng)協(xié)商機(jī)制。首先連接的某一方(通常是客戶進(jìn)程)發(fā)送3個(gè)字節(jié)的字符序列來(lái)請(qǐng) 求激活改選項(xiàng):
[0035] <IAC, WILL, 24>
[0036] 這里的24(十進(jìn)制)是終端類型選項(xiàng)的ID號(hào)。如果收端(通常是服務(wù)器進(jìn)程) 同意,那么響應(yīng)數(shù)據(jù)是:
[0037] <IAC, DO, 24>
[0038] 然后服務(wù)器進(jìn)程再發(fā)送如下的字符串:
[0039] <IAC, SB, 24, 1, IAC, SE>
[0040] 該字符串詢問(wèn)客戶進(jìn)程的終端類型,其中SB是子選項(xiàng)協(xié)商的起始命令。下一個(gè)字 節(jié)的"24"代表這是終端類型選項(xiàng)的子選項(xiàng)。下一個(gè)"1"表示"發(fā)送你的終端類型"。子選 項(xiàng)協(xié)商的結(jié)束命令標(biāo)識(shí)也是IAC,就像SB是起始命令標(biāo)志一樣。如果終纟而類型是ibmpc,客 戶進(jìn)程的響應(yīng)命令將是:
[0041] 〈IAC, SB,24, 0, ' Γ,,B,,,M,,,P,,,C,,IAC, SE>
[0042] 第4個(gè)字節(jié)"0"代表"我的終端類型是"。在Telnet子選項(xiàng)協(xié)商過(guò)程中,終端類型 用大寫表示,當(dāng)服務(wù)器收到該字符串后會(huì)自動(dòng)轉(zhuǎn)換為小寫字符。更詳細(xì)的Telnet協(xié)議相關(guān) 的信息請(qǐng)參考RFC相關(guān)文檔。
[0043] Telnet會(huì)話代理模塊通過(guò)使用代理轉(zhuǎn)發(fā)技術(shù),實(shí)現(xiàn)telnet會(huì)話數(shù)據(jù)的記錄、轉(zhuǎn) 發(fā)、回放、監(jiān)控等功能,代理轉(zhuǎn)發(fā)的結(jié)構(gòu)示意圖如圖1所示。
[0044] TELNET運(yùn)維會(huì)話審計(jì)功能包含的數(shù)據(jù)主題域及數(shù)據(jù)實(shí)體,如表1所示:
[0045] 表 1 :
[0046]
[0047]
【權(quán)利要求】
1. 一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,在服務(wù)器和客戶端之間建立Telnet轉(zhuǎn)發(fā)機(jī)制,包括 Telnet會(huì)話主進(jìn)程完成狀態(tài)的初始化并建立socket連接線程步驟和socket連接線程建立 連接并轉(zhuǎn)發(fā)消息步驟,其特征在于,還包括socket連接線程對(duì)轉(zhuǎn)發(fā)數(shù)據(jù)的監(jiān)控步驟,具體 為: (1) 當(dāng)接到回車指令時(shí),調(diào)用vtlOOline來(lái)判斷buffer的含義,解析出正確的命令; (2) 調(diào)用命令過(guò)濾模塊,判斷是否允許執(zhí)行該命令,如果允許調(diào)用proxy_data_write, 將解析出的正確命令發(fā)送給監(jiān)控程序,如果不允許,給客戶端轉(zhuǎn)發(fā)不允許執(zhí)行命令的信息, 給服務(wù)器轉(zhuǎn)發(fā)ctrl+c,不讓服務(wù)器執(zhí)行這條命令; (3) Thread_loop循環(huán)處理所有的讀寫事件,直到socket連接關(guān)閉。
2. 根據(jù)權(quán)利要求1所述的一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,其特征在于,所述Telnet會(huì)話主 進(jìn)程完成狀態(tài)的初始化并建立socket連接步驟具體方法為: (1) 調(diào)用 proxy_mod_init,proxy_session_init,proxy_data_init 三個(gè)函數(shù)來(lái)初始化 程序的模式、會(huì)話、數(shù)據(jù)信息,并完成互斥操作初始化及處理信號(hào)操作; (2) 調(diào)用socket函數(shù)創(chuàng)建socket,并調(diào)用bind, listen來(lái)綁定地址及監(jiān)聽端口; (3) 監(jiān)聽是否有新的socket連接請(qǐng)求,如果有新的連接請(qǐng)求,則調(diào)用accept函數(shù)接受 請(qǐng)求,并創(chuàng)建一個(gè)新線程來(lái)處理這個(gè)連接請(qǐng)求; (4) 當(dāng)主線程要結(jié)束時(shí),調(diào)用proxy_mod_destroy, proxy_ session-destroy, proxy- data_destroy三個(gè)函數(shù)來(lái)釋放掉相關(guān)資源。
3. 根據(jù)權(quán)利要求1所述的一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,其特征在于,所述socket連接線 程建立連接步驟具體為: (1 )socket 連接線程調(diào)用函數(shù) pthread_mutex_lock 和 pthread_mutex_unlock 來(lái)進(jìn)行 互斥操作,然后給客戶端發(fā)user和password提示符,提示用戶輸入用戶名和密碼,再調(diào)用 函數(shù) get_remote_line ; (2) 當(dāng)用戶輸入時(shí),解析這個(gè)輸入,將信息轉(zhuǎn)換成telnet的格式,再調(diào)用parse_iac2函 數(shù),判斷通信雙方協(xié)商的狀態(tài); (3) 得到有效的用戶名和密碼后,調(diào)用proxy_auth_check來(lái)驗(yàn)證是否正確,如果不正 確,直接斷開telnet連接,如果正確,則調(diào)用socket和connect函數(shù)連接到真正的服務(wù)器。
4. 根據(jù)權(quán)利要求1所述的一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,其特征在于,所述socket連接線 程轉(zhuǎn)發(fā)信息步驟具體為: (1) socket線程調(diào)用函數(shù)device_login_loop跟服務(wù)器進(jìn)行通信,然后調(diào)用thread_ loop函數(shù)處理所有的讀寫事件,如果有事件發(fā)生,則根據(jù)序號(hào)對(duì)每個(gè)事件分別進(jìn)行處理; (2) 處理過(guò)程調(diào)用handle_message函數(shù),首先調(diào)用recv函數(shù)來(lái)接收buffer,之后判斷 發(fā)信息者的socket類型,如果是客戶端所發(fā),則判斷buffer命令的類型,并賦予相應(yīng)的標(biāo) 識(shí)位,之后把buffer轉(zhuǎn)發(fā)給服務(wù)器。
5. 根據(jù)權(quán)利要求1所述的一種Telnet代理轉(zhuǎn)發(fā)機(jī)制,其特征在于,上述Telnet轉(zhuǎn)發(fā)機(jī) 制的會(huì)話過(guò)程中,對(duì)命令的解析采用如下方法: (1) 初始化一個(gè)有效的待解匹配的終端控制碼表; (2) 對(duì)緩沖區(qū)的字符逐個(gè)進(jìn)行解析,當(dāng)解析的字符匹配了某個(gè)終端控制碼后,就按照相 應(yīng)的終端控制碼的功能對(duì)輸出緩沖區(qū)進(jìn)行處理; (3) 如果當(dāng)前處理的字符不是控制碼,則將其記錄到輸出緩沖區(qū)中; (4) 當(dāng)輸入緩沖區(qū)處理完成之后,根據(jù)當(dāng)前輸出緩沖區(qū)以及光標(biāo)的位置輸出有效的命 令內(nèi)容。
【文檔編號(hào)】H04L12/24GK104065732SQ201410308090
【公開日】2014年9月24日 申請(qǐng)日期:2014年6月30日 優(yōu)先權(quán)日:2014年6月30日
【發(fā)明者】吳克河, 崔文超, 卻鑫運(yùn) 申請(qǐng)人:江蘇華大天益電力科技有限公司