網(wǎng)絡(luò)編程之Telnet簡(jiǎn)單遠(yuǎn)程登錄協(xié)議
這里不講解telnet協(xié)議的實(shí)現(xiàn)原理,主要用于學(xué)習(xí)telnet實(shí)際的編寫方式。 使用的網(wǎng)絡(luò)協(xié)議:tcp/ip?telnet協(xié)議 編程語(yǔ)言:C/C++ 庫(kù):socket套接字
了解telnet協(xié)議
一個(gè)簡(jiǎn)單的遠(yuǎn)程登錄協(xié)議
用于遠(yuǎn)程連接目標(biāo)計(jì)算機(jī),使用目標(biāo)計(jì)算機(jī)的cmd命令行實(shí)現(xiàn)遠(yuǎn)程操作。 登錄目標(biāo)計(jì)算機(jī)時(shí),必須提供計(jì)算機(jī)的用戶名和密碼憑證,才能成功登錄。 telnet協(xié)議的基礎(chǔ) telnet的默認(rèn)端口號(hào):23 客戶端與服務(wù)器通訊步驟: 客戶端連接服務(wù)器。 客戶端等待接收服務(wù)器發(fā)來(lái)的一組telnet命令。 客戶端解析命令,以服務(wù)器要求特性(其實(shí)就是一個(gè)命令中的第三個(gè)字節(jié)),以相同的方式,以接受要求的命令(修改第二個(gè)字節(jié)),發(fā)回給服務(wù)器。 服務(wù)器接收到以后,發(fā)送普通字符串(歡迎和一個(gè)login:),表示要你輸入計(jì)算機(jī)的用戶名憑證。 客戶端發(fā)送用戶名后,再發(fā)送LFCR(rn),表示準(zhǔn)備輸入密碼。 服務(wù)器接收到以后,發(fā)送普通字符串(password:),表示要你輸入計(jì)算機(jī)的用戶密碼憑證。
客戶端發(fā)送密碼后,再發(fā)送LFCR(rn),表示輸入完成。
服務(wù)器接收到以后,發(fā)送普通字符串:
1) 驗(yàn)證憑證成功:類似cmd命令行一樣的字符串,例子:C:UserAaron>
2) 驗(yàn)證憑證失?。壕浔鸁o(wú)效。Login Failed
3) 連續(xù)輸入錯(cuò)誤,默認(rèn)情況下只能輸錯(cuò)3次,3次以后服務(wù)器主動(dòng)斷開與客戶端的連接。
驗(yàn)證憑證成功,客戶端就像操作自己的cmd命令行一樣,可以遠(yuǎn)程操作目標(biāo)。
每輸入一個(gè)字符,發(fā)送到服務(wù)器,服務(wù)器響應(yīng)一個(gè)與發(fā)送字符相同的字符,表示你輸入了什么。 發(fā)送LFCR(rn),表示執(zhí)行這一段cmd命令,服務(wù)器就會(huì)響應(yīng)cmd命令行執(zhí)行完畢后,信息的反饋。 關(guān)閉客戶端,結(jié)束。 telnet協(xié)議的應(yīng)用層命令
由于不同的系統(tǒng),底層實(shí)現(xiàn)的不同,要做到兼容所有計(jì)算機(jī),而使用了NVT命令作為一個(gè)公共語(yǔ)言進(jìn)行交流。
一條telnet命令的格式:IAC ?每一條telnet NVT命令的第一個(gè)字節(jié)叫做IAC,十進(jìn)制值為255。 一條telnet命令的格式:IAC 命令 選項(xiàng)碼 ? ? ? 共3個(gè)字節(jié)EOF ?236 ?文件結(jié)束符 ?SUSP ?237 ?掛起當(dāng)前進(jìn)程 ?ABORT ?238 ?異常中止進(jìn)程 ?EOR ?239 ?記錄結(jié)束符 ?SE ?240 ?自選項(xiàng)結(jié)束 ?NOP ?241 ?無(wú)操作 ?DM ?242 ?數(shù)據(jù)標(biāo)記 ?BRK ?243 ?中斷 ?IP ?244 ?中斷進(jìn)程 ?AO ?245 ?異常中止輸出 ?AYT ?246 ?對(duì)方是否還在運(yùn)行? ?EC ?247 ?轉(zhuǎn)義字符 ?EL ?248 ?刪除行 ?GA ?249 ?繼續(xù)進(jìn)行 ?SB ?250(0xFA) ?子選項(xiàng)開始 ?WILL ?251(0xFB) ?同意啟動(dòng)(enable)選項(xiàng) ?WONT ?252(0xFC) ?拒絕啟動(dòng)選項(xiàng) ?DO ?253(0xFD) ?認(rèn)可選項(xiàng)請(qǐng)求 ?DONT ?254(0xFE) ?拒絕選項(xiàng)請(qǐng)求 協(xié)議協(xié)商:命令中包含相同的選項(xiàng)值,表示可同意激活或不同意激活的選項(xiàng),或自身表示愿意激活、不激活 ?注意:下面的發(fā)送方不止代表服務(wù)端,也代表客戶端。WILL ?發(fā)送方本身想要激活此選項(xiàng) ?DO:同意你激活、DONT:不同意你激活 ?DO ?發(fā)送方想叫接收端激活此選項(xiàng) ?WILL:我愿意激活、WONT:我不愿意激活 ?WONT ?發(fā)送方本身想禁止此選項(xiàng) ?DONT:同意你禁止(必須) ?DONT ?發(fā)送方想讓接收端去禁止選項(xiàng) ?WONT:愿意禁止(必須) 選項(xiàng)碼:1 ?回顯 ?3 ?抑制繼續(xù)進(jìn)行(禁止繼續(xù)進(jìn)行) ?5 ?狀態(tài) ?6 ?定時(shí)標(biāo)記(鬧鐘標(biāo)記) ?24 ?終端類型 ?31 ?窗口大小 ?32 ?終端速度 ?33 ?遠(yuǎn)程流量控制 ?34 ?行方式 ?36 ?環(huán)境變量 編寫telnet客戶端程序:
由于代碼過多,不好在這里直接貼出來(lái),我為使用telnet協(xié)議寫了一個(gè)C++類,可以很簡(jiǎn)單的使用登錄目標(biāo)計(jì)算機(jī),遠(yuǎn)程操作,想要學(xué)習(xí)登錄過程,解析Telnet命令的處理,可以下載學(xué)習(xí)一下:
| telnet命令 | 重要的telnet命令 | |
|---|---|---|
| telnet命令 | 十進(jìn)制表示 | 作用 |
| 備注 | ||
| 協(xié)商命令 | 發(fā)送方 | 接收方回應(yīng) |
| 十進(jìn)制 | 作用 |





