遠(yuǎn)程登錄(Telnet)是從多用戶系統(tǒng)發(fā)展而來的一種Internet服務(wù)方式,它允許用戶從一臺計算機(jī)連接到遠(yuǎn)程的另一臺計算機(jī)上,并建立一個交互的登錄過程。遠(yuǎn)程登錄實際上也是TCP/IP協(xié)議的應(yīng)用層協(xié)議,凡是采用TCP/IP的計算機(jī)網(wǎng)絡(luò),都能為用戶提供遠(yuǎn)程登錄服務(wù)。
在終端使用者的電腦上使用遠(yuǎn)程登錄程序,用它連接到服務(wù)器,終端使用者可以在遠(yuǎn)程登錄程序中輸入命令,這些命令會在服務(wù)器上運(yùn)行,就像直接在服務(wù)器的控制臺上輸入一樣,可以在本地就能控制服務(wù)器。在使用Telnet進(jìn)行遠(yuǎn)程登錄時,首先要知道遠(yuǎn)程主機(jī)的域名或IP地址,然后根據(jù)對方系統(tǒng)的詢問,正確輸入自己的用戶名和密碼。
遠(yuǎn)程登錄的根本目的是為用戶提供一種直接訪問遠(yuǎn)程計算機(jī)中的資源的方式。遠(yuǎn)程登錄能實現(xiàn)遠(yuǎn)程用戶管理,遠(yuǎn)程數(shù)據(jù)錄入,遠(yuǎn)程系統(tǒng)維護(hù)等需求。
登錄
Telnet服務(wù)雖然也屬于客戶機(jī)/服務(wù)器模型的服務(wù),但它更大的意義在于實現(xiàn)了基于Telnet協(xié)議的遠(yuǎn)程登錄(遠(yuǎn)程交互式計算),那么就讓我們來認(rèn)識一下遠(yuǎn)程登錄。
定義
先來看看什么叫登錄:分時系統(tǒng)允許多個用戶同時使用一臺計算機(jī),為了保證系統(tǒng)的安全和記賬方便,系統(tǒng)要求每個用戶有單獨(dú)的帳號作為登錄標(biāo)識,系統(tǒng)還為每個用戶指定了一個口令。用戶在使用該系統(tǒng)之前要輸入標(biāo)識和口令,這個過程被稱為'登錄'。遠(yuǎn)程登錄是指用戶使用Telnet命令,使自己的計算機(jī)暫時成為遠(yuǎn)程主機(jī)的一個仿真終端的過程。仿真終端等效于一個非智能的機(jī)器,它只負(fù)責(zé)把用戶輸入的每個字符傳遞給主機(jī),再將主機(jī)輸出的每個信息回顯在屏幕上。
產(chǎn)生和發(fā)展
我們可以先構(gòu)想一個提供遠(yuǎn)程文字編輯的服務(wù),這個服務(wù)的實現(xiàn)需要一個接受編輯文件請求和數(shù)據(jù)的服務(wù)器以及一個發(fā)送此請求的客戶機(jī)。客戶機(jī)將建立一個從本地機(jī)到服務(wù)器的TCP連接,當(dāng)然這需要服務(wù)器的應(yīng)答,然后向服務(wù)器發(fā)送鍵入的信息(文件編輯信息),并讀取從服務(wù)器返回的輸出。以上便是一個標(biāo)準(zhǔn)而普通的客戶機(jī)/服務(wù)器模型的服務(wù)。
似乎有了客戶機(jī)/服務(wù)器模型的服務(wù),一切遠(yuǎn)程問題都可以解決了。然而實際并非你想象的那樣簡單,如果我們僅需要遠(yuǎn)程編輯文件,那么剛才所構(gòu)想的服務(wù)完全可以勝任,但假如我們的要求并不是這么簡單,我們還想實現(xiàn)遠(yuǎn)程用戶管理,遠(yuǎn)程數(shù)據(jù)錄入,遠(yuǎn)程系統(tǒng)維護(hù),想實現(xiàn)一切可以在遠(yuǎn)程主機(jī)上實現(xiàn)的操作,那么我們將需要大量專用的服務(wù)器程序并為每一個可計算服務(wù)都使用一個服務(wù)器進(jìn)程,隨之而來的問題是:遠(yuǎn)程機(jī)器會很快對服務(wù)器進(jìn)程應(yīng)接不暇,并淹沒在進(jìn)程的海洋里(我們在這里排除最專業(yè)化的遠(yuǎn)程機(jī)器)。
那么有沒有辦法解決呢?當(dāng)然有,我們可以用遠(yuǎn)程登錄來解決這一切。我們允許用戶在遠(yuǎn)地機(jī)器上建立一個登錄會話,然后通過執(zhí)行命令來實現(xiàn)更一般的服務(wù),就像在本地操作一樣。這樣,我們便可以訪問遠(yuǎn)地系統(tǒng)上所有可用的命令,并且系統(tǒng)設(shè)計員不需提供多個專用地服務(wù)器程序。
問題發(fā)展到這里好像前途一片光明了,用遠(yuǎn)程登錄總應(yīng)該解決問題了吧,但要實現(xiàn)遠(yuǎn)程登錄并不簡單。不考慮網(wǎng)絡(luò)設(shè)計的計算機(jī)系統(tǒng)期望用戶只從直接相連的鍵盤和顯示器上登錄,在這種機(jī)器上增加遠(yuǎn)程登錄功能需要修改機(jī)器的操作系統(tǒng),這是極其艱巨也是我們盡量避免的。因此我們應(yīng)該集中力量構(gòu)造遠(yuǎn)程登錄服務(wù)器軟件,雖然這樣也是比較困難的。為什么說這樣做也比較困難呢?
舉個例子來說:一般,操作系統(tǒng)會為一些特殊按鍵分配特殊的含義,比如本地系統(tǒng)將'Ctrl+C'解釋為:'終止當(dāng)前運(yùn)行的命令進(jìn)程'。但假設(shè)我們已經(jīng)運(yùn)行了遠(yuǎn)程登錄服務(wù)器軟件,'Ctrl+C'也有可能無法被傳送到遠(yuǎn)地機(jī)器,如果客戶機(jī)真的將'Ctrl+C'傳到了遠(yuǎn)地機(jī)器,那么'Ctrl+C'這個命令有可能不能終止本地的進(jìn)程,也就是說在這里很可能會產(chǎn)生混亂。而且這僅僅是遇到的難題之一。
但盡管有技術(shù)上的困難,系統(tǒng)編程人員還是設(shè)法構(gòu)造了能夠應(yīng)用于大多數(shù)操作系統(tǒng)的遠(yuǎn)程登錄服務(wù)器軟件,并構(gòu)造了充當(dāng)客戶機(jī)的應(yīng)用軟件。通常,客戶機(jī)軟件取消了除一個鍵以外的所有鍵的本地解釋,并將這些本地解釋相應(yīng)的轉(zhuǎn)換成遠(yuǎn)地解釋,這就使得客戶機(jī)軟件與遠(yuǎn)地機(jī)器的交互,就如同坐在遠(yuǎn)程主機(jī)面前一樣,從而避免了上述所提到的混亂。而那個唯一例外的鍵,可以使用戶回到本地環(huán)境。
將遠(yuǎn)程登錄服務(wù)器設(shè)計為應(yīng)用級軟件,還有另一個要求,那就是需要操作系統(tǒng)提供對偽終端(pseudo terminal)的支持。我們用偽終端描述操作系統(tǒng)的入口點(diǎn),它允許像Telnet服務(wù)器一樣的程序向操作系統(tǒng)傳送字符,并且使得字符像是來自本地鍵盤一樣。只有使用這樣的操作系統(tǒng),才能將遠(yuǎn)程登錄服務(wù)器設(shè)計為應(yīng)用級軟件(比如Telnet服務(wù)器軟件),否則,本地操作系統(tǒng)和遠(yuǎn)地系統(tǒng)傳送將不能識別從對方傳送過來的信息(因為它們僅能識別從本地鍵盤所鍵入的信息),遠(yuǎn)程登錄將宣告失敗。
將遠(yuǎn)程登陸服務(wù)器設(shè)計為應(yīng)用級軟件雖然有其顯著的優(yōu)點(diǎn):比將代碼嵌入操作系統(tǒng)更易修改和控制服務(wù)器。但其也有效率不高的缺點(diǎn)(后面的內(nèi)容將會給予解釋),好在用戶鍵入信息的速率不高,這種設(shè)計還是可以接受的。
工作過程
使用Telnet協(xié)議進(jìn)行遠(yuǎn)程登錄時需要滿足以下條件:在本地計算機(jī)上必須裝有包含Telnet協(xié)議的客戶程序;必須知道遠(yuǎn)程主機(jī)的Ip地址或域名;必須知道登錄標(biāo)識與口令。
Telnet遠(yuǎn)程登錄服務(wù)分為以下4個過程:
1)本地與遠(yuǎn)程主機(jī)建立連接。該過程實際上是建立一個TCP連接,用戶必須知道遠(yuǎn)程主機(jī)的Ip地址或域名;
2)將本地終端上輸入的用戶名和口令及以后輸入的任何命令或字符以NVT(Net Virtual Terminal)格式傳送到遠(yuǎn)程主機(jī)。該過程實際上是從本地主機(jī)向遠(yuǎn)程主機(jī)發(fā)送一個IP數(shù)據(jù)包;
3)將遠(yuǎn)程主機(jī)輸出的NVT格式的數(shù)據(jù)轉(zhuǎn)化為本地所接受的格式送回本地終端,包括輸入命令回顯和命令執(zhí)行結(jié)果;
4)最后,本地終端對遠(yuǎn)程主機(jī)進(jìn)行撤消連接。該過程是撤銷一個TCP連接。
上面的內(nèi)容只是討論了遠(yuǎn)程登陸最基本的東西,其中的復(fù)雜和編程人員的艱辛是我們難以想象的,不知道你在舒服的使用Telnet的同時,是否想到了這些!
功能
用途
Telnet是Internet遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式,最初由ARPANET開發(fā),現(xiàn)在主要用于Internet會話,它的基本功能是允許用戶登錄進(jìn)入遠(yuǎn)程主機(jī)系統(tǒng)。
Telnet可以讓我們坐在自己的計算機(jī)前通過Internet網(wǎng)絡(luò)登錄到另一臺遠(yuǎn)程計算機(jī)上,這臺計算機(jī)可以是在隔壁的房間里,也可以是在地球的另一端。當(dāng)?shù)卿浬线h(yuǎn)程計算機(jī)后,本地計算機(jī)就等同于遠(yuǎn)程計算機(jī)的一個終端,我們可以用自己的計算機(jī)直接操縱遠(yuǎn)程計算機(jī),享受遠(yuǎn)程計算機(jī)本地終端同樣的操作權(quán)限。
Telnet的主要用途就是使用遠(yuǎn)程計算機(jī)上所擁有的本地計算機(jī)沒有的信息資源,如果遠(yuǎn)程的主要目的是在本地計算機(jī)與遠(yuǎn)程計算機(jī)之間傳遞文件,那么相比而言使用斷點(diǎn)續(xù)傳會更加快捷有效。
交互過程
當(dāng)我們使用Telnet登錄進(jìn)入遠(yuǎn)程計算機(jī)系統(tǒng)時,事實上啟動了兩個程序:一個是Telnet客戶程序,運(yùn)行在本地主機(jī)上;另一個是Telnet服務(wù)器程序,它運(yùn)行在要登錄的遠(yuǎn)程計算機(jī)上。
本地主機(jī)上的Telnet客戶程序主要完成以下功能:
遠(yuǎn)程主機(jī)的“服務(wù)”程序通常被昵稱為“精靈”,它平時不聲不響地守候在遠(yuǎn)程主機(jī)上,一接到本地主機(jī)的請求,就會立馬活躍起來,并完成以下功能:
在Internet中,很多服務(wù)都采取這樣一種客戶/服務(wù)器結(jié)構(gòu)。對使用者來講,通常只要了解客戶端的程序就可以了。
安全隱患
雖然Telnet較為簡單實用也很方便,但是在格外注重安全的現(xiàn)代網(wǎng)絡(luò)技術(shù)中,Telnet并不被重用。原因在于Telnet是一個明文傳送協(xié)議,它將用戶的所有內(nèi)容,包括用戶名和密碼都明文在互聯(lián)網(wǎng)上傳送,具有一定的安全隱患,因此許多服務(wù)器都會選擇禁用Telnet服務(wù)。如果我們要使用Telnet的遠(yuǎn)程登錄,使用前應(yīng)在遠(yuǎn)端服務(wù)器上檢查并設(shè)置允許Telnet服務(wù)的功能。
協(xié)議
我們知道Telnet服務(wù)器軟件是我們最常用的遠(yuǎn)程登錄服務(wù)器軟件,是一種典型的客戶機(jī)/服務(wù)器模型的服務(wù),它應(yīng)用Telnet協(xié)議來工作。那么,什么是Telnet協(xié)議?它都具備哪些特點(diǎn)呢?
基本內(nèi)容
Telnet是位于OSI模型的第7層---應(yīng)用層上的一種協(xié)議,是一個通過創(chuàng)建虛擬終端提供連接到遠(yuǎn)程主機(jī)終端仿真的TCP/IP協(xié)議。這一協(xié)議需要通過用戶名和口令進(jìn)行認(rèn)證,是Internet遠(yuǎn)程登陸服務(wù)的標(biāo)準(zhǔn)協(xié)議。應(yīng)用Telnet協(xié)議能夠把本地用戶所使用的計算機(jī)變成遠(yuǎn)程主機(jī)系統(tǒng)的一個終端。它提供了三種基本服務(wù):
1)Telnet定義一個網(wǎng)絡(luò)虛擬終端為遠(yuǎn)程系統(tǒng)提供一個標(biāo)準(zhǔn)接口。客戶機(jī)程序不必詳細(xì)了解遠(yuǎn)程系統(tǒng),他們只需構(gòu)造使用標(biāo)準(zhǔn)接口的程序;
2)Telnet包括一個允許客戶機(jī)和服務(wù)器協(xié)商選項的機(jī)制,而且它還提供一組標(biāo)準(zhǔn)選項; .
3)Telnet對稱處理連接的兩端,即Telnet不強(qiáng)迫客戶機(jī)從鍵盤輸入,也不強(qiáng)迫客戶機(jī)在屏幕上顯示輸出。
適應(yīng)異構(gòu)
為了使多個操作系統(tǒng)間的Telnet交互操作成為可能,就必須詳細(xì)了解異構(gòu)計算機(jī)和操作系統(tǒng)。比如,一些操作系統(tǒng)需要每行文本用ASCⅡ回車控制符(CR)結(jié)束,另一些系統(tǒng)則需要使用ASCⅡ換行符(LF),還有一些系統(tǒng)需要用兩個字符的序列回車-換行(CR-LF);再比如,大多數(shù)操作系統(tǒng)為用戶提供了一個中斷程序運(yùn)行的快捷鍵,但這個快捷鍵在各個系統(tǒng)中有可能不同(一些系統(tǒng)使用CTRL+C,而另一些系統(tǒng)使用ESCAPE)。如果不考慮系統(tǒng)間的異構(gòu)性,那么在本地發(fā)出的字符或命令,傳送到遠(yuǎn)地并被遠(yuǎn)程系統(tǒng)解釋后很可能會不準(zhǔn)確或者出現(xiàn)錯誤。因此,Telnet協(xié)議必須解決這個問題。為了適應(yīng)異構(gòu)環(huán)境,Telnet協(xié)議定義了數(shù)據(jù)和命令在Internet上的傳輸方式,此定義被稱作網(wǎng)絡(luò)虛擬終端NVT(Net Virtual Terminal)。它的應(yīng)用過程如下:對于發(fā)送的數(shù)據(jù):客戶機(jī)軟件把來自用戶終端的按鍵和命令序列轉(zhuǎn)換為NVT格式,并發(fā)送到服務(wù)器,服務(wù)器軟件將收到的數(shù)據(jù)和命令,從NVT格式轉(zhuǎn)換為遠(yuǎn)地系統(tǒng)需要的格式;對于返回的數(shù)據(jù):遠(yuǎn)地服務(wù)器將數(shù)據(jù)從遠(yuǎn)地機(jī)器的格式轉(zhuǎn)換為NVT格式,而本地客戶機(jī)將接收到的NVT格式數(shù)據(jù)再轉(zhuǎn)換為本地的格式。對于NVT格式的詳細(xì)定義,有興趣的朋友可以去查找相關(guān)資料。
傳送遠(yuǎn)程命令
我們知道絕大多數(shù)操作系統(tǒng)都提供各種快捷鍵來實現(xiàn)相應(yīng)的控制命令,當(dāng)用戶在本地終端鍵入這些快捷鍵的時候,本地系統(tǒng)將執(zhí)行相應(yīng)的控制命令,而不把這些快捷鍵作為輸入。那么對于Telnet來說,它是用什么來實現(xiàn)控制命令的遠(yuǎn)程傳送呢? Telnet同樣使用NVT來定義如何從客戶機(jī)將控制功能傳送到服務(wù)器。我們知道ASCⅡ字符集包括95個可打印字符和33個控制碼。當(dāng)用戶從本地鍵入普通字符時,NVT將按照其原始含義傳送;當(dāng)用戶鍵入快捷鍵(組合鍵)時,NVT將把它轉(zhuǎn)化為特殊的ASCⅡ字符在網(wǎng)絡(luò)上傳送,并在其到達(dá)遠(yuǎn)地機(jī)器后轉(zhuǎn)化為相應(yīng)的控制命令。
將正常ASCⅡ字符集與控制命令區(qū)分的原因:
1)這種區(qū)分意味著Telnet具有更大的靈活性:它可在客戶機(jī)與服務(wù)器間傳送所有可能的ASCⅡ字符以及所有控制功能;
2)這種區(qū)分使得客戶機(jī)可以無二義性的指定信令,而不會產(chǎn)生控制功能與普通字符的混亂。 .
數(shù)據(jù)流向
上面我們提到過將Telnet設(shè)計為應(yīng)用級軟件有一個缺點(diǎn),那就是:效率不高。這是為什么呢?下面給出Telnet中的數(shù)據(jù)流向:
數(shù)據(jù)信息被用戶從本地鍵盤鍵入并通過操作系統(tǒng)傳到客戶機(jī)程序,客戶機(jī)程序?qū)⑵涮幚砗蠓祷夭僮飨到y(tǒng),并由操作系統(tǒng)經(jīng)過網(wǎng)絡(luò)傳送到遠(yuǎn)程機(jī)器,遠(yuǎn)程操作系統(tǒng)將所接收數(shù)據(jù)傳給服務(wù)器程序,并經(jīng)服務(wù)器程序再次處理后返回到操作系統(tǒng)上的偽終端入口點(diǎn),最后,遠(yuǎn)程操作系統(tǒng)將數(shù)據(jù)傳送到用戶正在運(yùn)行的應(yīng)用程序,這便是一次完整的輸入過程;輸出將按照同一通路從服務(wù)器傳送到客戶機(jī)。因為每一次的輸入和輸出,計算機(jī)將切換進(jìn)程環(huán)境好幾次,這個開銷是很昂貴的。還好用戶的鍵入速率并不算高,這個缺點(diǎn)我們?nèi)匀荒軌蚪邮堋!?
強(qiáng)制命令
我們應(yīng)該考慮到這樣一種情況:假設(shè)本地用戶運(yùn)行了遠(yuǎn)地機(jī)器的一個無休止循環(huán)的錯誤命令或程序,且此命令或程序已經(jīng)停止讀取輸入,那么操作系統(tǒng)的緩沖區(qū)可能因此而被占滿,如果這樣,遠(yuǎn)程服務(wù)器也無法再將數(shù)據(jù)寫入偽終端,并且最終導(dǎo)致停止從TCP連接讀取數(shù)據(jù),TCP連接的緩沖區(qū)最終也會被占滿,從而導(dǎo)致阻止數(shù)據(jù)流流入此連接。如果以上事情真的發(fā)生了,那么本地用戶將失去對遠(yuǎn)程機(jī)器的控制。
為了解決此問題,Telnet協(xié)議必須使用外帶信令以便強(qiáng)制服務(wù)器讀取一個控制命令。我們知道TCP用緊急數(shù)據(jù)機(jī)制實現(xiàn)外帶數(shù)據(jù)信令,那么Telnet只要再附加一個被稱為數(shù)據(jù)標(biāo)記(date mark)的保留八位組,并通過讓TCP發(fā)送已設(shè)置緊急數(shù)據(jù)比特的報文段通知服務(wù)器便可以了,攜帶緊急數(shù)據(jù)的報文段將繞過流量控制直接到達(dá)服務(wù)器。作為對緊急信令的相應(yīng),服務(wù)器將讀取并拋棄所有數(shù)據(jù),直到找到了一個數(shù)據(jù)標(biāo)記。服務(wù)器在遇到了數(shù)據(jù)標(biāo)記后將返回正常的處理過程。
由于Telnet兩端的機(jī)器和操作系統(tǒng)的異構(gòu)性,使得Telnet不可能也不應(yīng)該嚴(yán)格規(guī)定每一個telnet連接的詳細(xì)配置,否則將大大影響Telnet的適應(yīng)異構(gòu)性。因此,Telnet采用選項協(xié)商機(jī)制來解決這一問題。
Telnet選項的范圍很廣:一些選項擴(kuò)充了大方向的功能,而一些選項制涉及一些微小細(xì)節(jié)。例如:有一個選項可以控制Telnet是在半雙工還是全雙工模式下工作(大方向);還有一個選項允許遠(yuǎn)地機(jī)器上的服務(wù)器決定用戶終端類型(小細(xì)節(jié))。
Telnet選項的協(xié)商方式也很有意思,它對于每個選項的處理都是對稱的,即任何一端都可以發(fā)出協(xié)商申請;任何一端都可以接受或拒絕這個申請。另外,如果一端試圖協(xié)商另一端不了解的選項,接受請求的一端可簡單的拒絕協(xié)商。因此,有可能將更新,更復(fù)雜的Telnet客戶機(jī)服務(wù)器版本與較老的,不太復(fù)雜的版本進(jìn)行交互操作。如果客戶機(jī)和服務(wù)器都理解新的選項,可能會對交互有所改善。否則,它們將一起轉(zhuǎn)到效率較低但可工作的方式下運(yùn)行。所有的這些設(shè)計,都是為了增強(qiáng)適應(yīng)異構(gòu)性,可見Telnet的適應(yīng)異構(gòu)性對其的應(yīng)用和發(fā)展是多么重要。
上面討論了一些原理方面的東西,雖然我們在Telnet的使用過程中很難接觸到這一層面,但我認(rèn)為了解這些是有意義的,它會給我們帶來許多啟示。下面讓我們來看看Windows 2000的Telnet服務(wù)。
子選項協(xié)商
有些選項不是僅僅用“激活”或“禁止”就能夠表達(dá)的。指定終端類型就是一個例子,客戶進(jìn)程必須發(fā)送用一個A S C I I字符串來表示終端類型。為了處理這種選項,我們必須定義子選項協(xié)商機(jī)制。
在R F C 1 0 9 1 [ VanBokkelen 1989]中定義了如何表示終端類型這樣的子選項協(xié)商機(jī)制。首先連接的某一方(通常是客戶進(jìn)程)發(fā)送3個字節(jié)的字符序列來請求激活該選項。
這里的2 4(十進(jìn)制)是終端類型選項的I D號。如果收端(通常是服務(wù)器進(jìn)程)同意,那么響應(yīng)數(shù)據(jù)是:
然后服務(wù)器進(jìn)程再發(fā)送如下的字符串:
該字符串詢問客戶進(jìn)程的終端類型。其中S B是子選項協(xié)商的起始命令標(biāo)志。下一個字節(jié)的“2 4”代表這是終端類型選項的子選項(通常S B后面的選項值就是子選項所要提交的內(nèi)容)。下一個字節(jié)的“ 1”表示“發(fā)送你的終端類型”。子選項協(xié)商的結(jié)束命令標(biāo)志也是I A C,就像S B是起始命令標(biāo)志一樣。如果終端類型是i b m p c,客戶進(jìn)程的響應(yīng)命令將是:
第4個字節(jié)“0”代表“我的終端類型是”(在Assigned Numbers RFC文檔中有正式的關(guān)于終端類型的數(shù)值定義,但是最起碼在U n i x系統(tǒng)之間,終端類型可以用任何對方可理解的數(shù)據(jù)進(jìn)行表示。只要這些數(shù)據(jù)在t e r m c a p或t e r m i n f o數(shù)據(jù)庫中有定義)。在Te l n e t子選項協(xié)商過程中,終端類型用大寫表示,當(dāng)服務(wù)器收到該字符串后會自動轉(zhuǎn)換為小寫字符。
配置
其實從應(yīng)用層面上,Windows 2000的Telnet服務(wù)并沒有什么可說的,絕大部分內(nèi)容你都可以從HELP文件中得到,我在此只是把它稍微整理一下而已。 Win2000為我們提供了Telnet客戶機(jī)和服務(wù)器程序:Telnet.exe是客戶機(jī)程序(Client),tlntsvr.exe是服務(wù)器程序(server),同時它還為我們提供了Telnet服務(wù)器管理程序tlntadmn.exe。
Windows 2000 默認(rèn)安裝了 Telnet 服務(wù),但是并沒有默認(rèn)啟動。下面給出HELP文件中 Telnet 服務(wù)的一部分默認(rèn)設(shè)置:
AllowTrustedDomain:是否允許域用戶訪問。默認(rèn)值是1,允許信任域用戶訪問。可以改為0: 不允許域用戶訪問(只允許本地用戶)。
DefaultDomain:可以對與該計算機(jī)具有信任關(guān)系的任何域設(shè)置。默認(rèn)值是"."。
DefaultShell:顯示 殼層 安裝的路徑位置。默認(rèn)值是:%systemroot%\system32\Cmd.exe /q /k
MaxFailedLogins:在連接終止之前顯示嘗試登錄失敗的最大次數(shù)。默認(rèn)是3。
LoginScript:顯示 Telnet服務(wù)器登錄腳本的路徑位置。默認(rèn)的位置就是“%systemroot%\System32\login.cmd”,你可以更改腳本內(nèi)容,這樣登錄進(jìn)Telnet的歡迎屏幕就不一樣了。
NTLM:NTLM身份驗證選項。默認(rèn)是2。可以有下面這些值:
0: 不使用 NTLM身份驗證。
1: 先嘗試 NTLM身份驗證,如果失敗,再使用用戶名和密碼。
2: 只使用 NTLM身份驗證。
TelnetPort:顯示 telnet服務(wù)器偵聽 telnet 請求的端口。默認(rèn)是:23。你也可以更改為其他端口。
以上各項設(shè)置你可以使用tlntadmn.exe(Telnet服務(wù)器管理程序)來進(jìn)行非常方便的配置,配置后需要重新啟動Telnet服務(wù)。如圖1
NTLM
提到了telnet就不能不提NTLM,我想這也是讓入侵者最為頭痛的一件事,哪怕你獲得了管理員帳號和密碼,想簡單通過NTLM也并非易事,況且Windows 2000中的telnet默認(rèn)僅以NTLM方式驗證身份,這就讓我們不得不關(guān)注NTLM這個東東,那么什么是NTLM呢?
早期的SMB協(xié)議在網(wǎng)絡(luò)上明文傳輸口令,后來出現(xiàn)了"LAN Manager Challenge/Response"驗證機(jī)制,簡稱LM,它十分簡單以至很容易被破解,微軟隨后提出了WindowsNT挑戰(zhàn)/響應(yīng)驗證機(jī)制,即NTLM。現(xiàn)在已經(jīng)有了更新的NTLMv2以及Kerberos驗證體系。
流程
1.客戶端首先在本地加密當(dāng)前用戶的密碼成為密碼散列
2.客戶端向服務(wù)器發(fā)送自己的帳號,這個帳號是沒有經(jīng)過加密的,明文直接傳輸
3.服務(wù)器產(chǎn)生一個16位的隨機(jī)數(shù)字發(fā)送給客戶端,作為一個 challenge(查問口令;盤問)
4.客戶端再用加密后的密碼散列來加密這個 challenge ,然后把這個返回給服務(wù)器。作為 response(響應(yīng))
5.服務(wù)器把用戶名、給客戶端的challenge 、客戶端返回的 response 這三個東西,發(fā)送域控制器
6.域控制器用這個用戶名在 SAM密碼管理庫中找到這個用戶的密碼散列,然后使用這個密碼散列來加密 challenge。
7.域控制器比較兩次加密的 challenge ,如果一樣,那么認(rèn)證成功。
從上面的過程我們可以看出,NTLM是以當(dāng)前用戶的身份向Telnet服務(wù)器發(fā)送登錄請求的,而不是用你掃到的對方管理員的帳戶和密碼登錄,顯然,你的登錄將會失敗。舉個例子來說,你家的機(jī)器名為A(本地機(jī)器),你入侵的機(jī)器名為B(遠(yuǎn)地機(jī)器),你在A上的帳戶是xinxin,密碼是1234,你掃到B的管理員帳號是Administrator,密碼是5678,當(dāng)你想Telnet到B時,NTLM將自動以當(dāng)前用戶的帳號和密碼作為登錄的憑據(jù)來進(jìn)行上面的7項操作,即用xinxin和1234,而并非用你掃到的Administrator和5678,且這些都是自動完成的,根本不給你插手的機(jī)會,因此你的登錄操作將失敗。
顯示
由于Telnet服務(wù)器對NTLM的使用有3個選項,所以當(dāng)你Telnet遠(yuǎn)地機(jī)器時,會顯示下面情況中的一種:
1)身份驗證選項=0時
=====================================
微軟 (R) Windows (TM) Version 5.00 (Build 2195)
login:
password:
\為0時不使用NTML身份驗證,直接輸入用戶名和密碼,比如你可以輸入掃到的Administrator和5678
2)身份驗證選項=1時
=====================================
NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password
微軟 (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
password:
\先嘗試 NTLM 身份驗證,如果失敗,再使用用戶名和密碼,其實這種方式對于我們來說,與上一種方式?jīng)]什么區(qū)別
3)身份驗證選項=2時
=====================================
NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password
Server allows NTLM authentication only
Server has closed connection
遺失對主機(jī)的連接。
C:\>
\仔細(xì)看看上面的顯示,根本沒有給你輸入用戶名和密碼的機(jī)會,直接斷開連接,掃到了密碼也是白掃
所以對于入侵者來說,NTLM是橫在我們面前的一座大山,必須要除掉它,一般我們有如下幾種方法:
1通過修改遠(yuǎn)程注冊表更改telnet服務(wù)器配置,將驗證方式從2改為1或0;
2使用NTLM.exe,上傳后直接運(yùn)行,可將telnet服務(wù)器驗證方式從2改為1;
3在本地建立掃描到的用戶,以此用戶身份開啟telnet客戶機(jī)并進(jìn)行遠(yuǎn)程登錄;
4使用軟件,比如opentelnet.exe(需要管理員權(quán)限且開啟IPC管道)
5使用腳本,如RTCS,(需要管理員權(quán)限但不依賴IPC管道)
基本上是以上的5種,其中后兩種是我們比較常用的開telnet的手法,而且使用方法十分簡單,命令如下:
OpenTelnet.exe \server username password NTLMAuthor telnetport
OpenTelnet.exe \服務(wù)器地址 管理員用戶名 密碼 驗證方式(填0或1) telnet端口
cscript RTCS.vbe targetIP username password NTLMAuthor telnetport
cscript RTCS.vbe <;目標(biāo)IP> <;管理員用戶名> <;密碼> <;驗證方式>
遠(yuǎn)程登錄
Telnet用于Internet的遠(yuǎn)程登錄。它可以使用戶坐在已上網(wǎng)的電腦鍵盤前通過網(wǎng)絡(luò)進(jìn)入的另一臺電腦已上網(wǎng)的電腦,使它們互相連通。這種連通可以發(fā)生在同一房間里面的電腦或是在世界各范圍內(nèi)已上網(wǎng)的電腦。習(xí)慣上來說,被連通計算機(jī),并且為網(wǎng)絡(luò)上所有用戶提供服務(wù)的計算機(jī)稱之為服務(wù)器(Server),而自己在使用的機(jī)器稱之為客戶機(jī)(Client).一旦連通后,客戶機(jī)可以享有服務(wù)器所提供的一切服務(wù)。用戶可以運(yùn)行通常的交互過程(注冊進(jìn)入,執(zhí)行命令),也可以進(jìn)入很多的特殊的服務(wù)器如尋找圖書索引。網(wǎng)上不同的主機(jī)提供的各種服務(wù)都可以被使用.
Telnet
(telnet) (n.) A terminal emulation program for TCP/IP networks such as the Internet. The Telnet program runs on your computer and connects your PC to a server on the network. You can then enter commands through the Telnet program and they will be executed as if you were entering them directly on the server console. This enables you to control the server and communicate with other servers on the network. To start a Telnet session,you must log in to a server by entering a valid username and password. Telnet is a common way to remotely control Web servers.
Telnet命令
使用Telnet的最簡單的方法是在命令行鍵入:
%telnet remote-computer-name(or IP)
這里使用的是UNⅨ系統(tǒng)的C shell,因為命令的選擇是百分號"%".如果使用的是其他的計算機(jī)系統(tǒng)(比如:Dos,VAX/VMS,麥金塔)命令,只在細(xì)節(jié)上有些差異,而在本質(zhì)上是大同小異的,下面舉一個基本的Telnet使用例子:
telnet porky.數(shù)學(xué)
Trying 129.237.128.11…
Connected to porky.math
Escape character is '^]'.
SunOS UNⅨ(porky)
login:wl
password:xxxxxxx
Last Login: Tue Mar 28 05:35 from ns
SunOS Release 4.1.3_U1(SLIPPERY1) #3: Sun Nov 20 23:47:23 CST 1999
No match.
if:Expression SYNTAX
porky/serv/wl%ls
hello
porky/serv/wl%
porky/serv/wl%cd/
porky/%ls
Mail/ dev/ home/ mnt/ sbin/
usr/
News/ domain/ home1/ net/ serv/
var/
Record/ etc/ kadb* pcfs/ sys@
vmunix*
bin@ export/ 天秤座@ print tmp/
boot gofer/ lost+found/ record tmp_mnt/
porky/%
上述的例子是用Telnet尋找一個叫做porky.數(shù)學(xué)的遠(yuǎn)程計算機(jī)。在找到這臺計算機(jī)以后,已上網(wǎng)的用戶的計算機(jī)就成為它的一個終端。這時屏幕出現(xiàn)的對話與用戶在host上連接的終端一樣。用戶必須注冊進(jìn)入(login)和注銷推出(logout).在login后,可給出任何適合遠(yuǎn)程系統(tǒng)的命令,因為"面向的是UNⅨ系統(tǒng),所有標(biāo)準(zhǔn)的UNⅨ命令(想ls和pwd)都可以使用。當(dāng)用戶從遠(yuǎn)程系統(tǒng)退出時,也就從Telnet退出,便可以運(yùn)行自己的本地系統(tǒng)。實際上,Telnet是一個可以注冊進(jìn)入遠(yuǎn)程計算機(jī)系統(tǒng)的工具.
命令
help 聯(lián)機(jī)求助
open后接IP地址或域名即可進(jìn)行遠(yuǎn)程登錄
close 正常結(jié)束遠(yuǎn)程會話,回到命令方式
display 顯示工作參數(shù)
mode 進(jìn)入行命令或字符方式
send 向遠(yuǎn)程主機(jī)傳送特殊字符(鍵入send?可顯示詳細(xì)字符)
set 設(shè)置工作參數(shù)(鍵入set?可顯示詳細(xì)參數(shù))
status 顯示狀態(tài)信息
toggle 改變工作參數(shù)(鍵入toggle?可顯示詳細(xì)參數(shù))
^]換碼符(escape character),在異常情況下退出會話,回到命令方式
quit退出telnet,返回本地機(jī)
z使telnet進(jìn)入暫停狀態(tài)
telnet.exe 的安全問題
建議修改權(quán)限,刪除所有的用戶只保存Administrators 和SYSTEM為所有權(quán)限
常見問題
1. Telnet是什么?答:Telnet是teletype network的縮寫,現(xiàn)在已成為一個專有名詞,表示遠(yuǎn)程登錄協(xié)議和方式,分為Telnet客戶端和Telnet服務(wù)器程序. Telnet可以讓用戶在本地Telnet客戶端上遠(yuǎn)端登錄到遠(yuǎn)程Telnet服務(wù)器上.
2. Telnet有什么作用?答: Telnet提供遠(yuǎn)程登錄功能,使得用戶在本地主機(jī)上運(yùn)行Telnet客戶端,就可登錄到遠(yuǎn)端的Telnet服務(wù)器. 在本地輸入的命令可以在服務(wù)器上運(yùn)行,服務(wù)器把結(jié)果返回到本地,如同直接在服務(wù)器控制臺上操作. 這樣就可以在本地遠(yuǎn)程操作和控制服務(wù)器.
3. Telnet工作模式有哪些?答:Telnet共有四種工作模式:
1)半雙工:客戶端在接收用戶輸入之前,必須從服務(wù)器進(jìn)程獲得GO AHEAD (G A)命令. 現(xiàn)在已很少使用.
2)一次一個字符:客戶端把用戶輸入的每個字符都單獨(dú)發(fā)送給服務(wù)器,服務(wù)器回顯字符給客戶端. 是目前大多數(shù)Telnet程序的默認(rèn)方式. SUPPRESS GO AHEAD選項和ECHO選項必須同時有效.
3)準(zhǔn)行方式(kludge line mode): 用戶每鍵入一行信息,客戶端向服務(wù)器發(fā)送一次. 當(dāng)上面兩個選項其中之一無效時采用此模式.
4)行方式:類似準(zhǔn)行方式,糾正了準(zhǔn)行方式的缺點(diǎn). 較新的Telnet程序支持這種方式.
4. SUPPRESS GO AHEAD和ECHO選項作用和意義是什么
答:如果激活"GO AHEAD"選項,則是一個半雙工模式,為了工作在“一次一個字符”,需要抑制此選項,即激活"SUPPRESS GO AHEAD".ECHO選項使回顯功能有效.
兩者同時激活表示采用“一次一個字符”工作方式.
5. 為何有時無法成功建立Telnet連接? 如何解決
答:如果服務(wù)器不在23號端口,而在其它端口等待用戶連接,此時Telnet將失敗,客戶端需要更改連接的端口.
另外Telnet是一個明文傳送協(xié)議,為了安全起見,許多防火墻將其禁用,如果需要進(jìn)行遠(yuǎn)程登錄,可以設(shè)置防火墻以允許Telnet.
6. Telnet是明文傳送的,具有安全隱患,請問該怎么辦
答: Telnet將用戶的所有內(nèi)容,包括用戶名和密碼都明文在互聯(lián)網(wǎng)上傳送,具有安全隱患,因此許多服務(wù)器都禁用Telnet服務(wù). 但有時又需要遠(yuǎn)程登錄到服務(wù)器上進(jìn)行操作,此時可以選擇具有加密功能的SSH(Secure Shell)程序.
參考資料 >