畢業(yè)論文-編程實現(xiàn)TELNET協(xié)議的基本功能_第1頁
畢業(yè)論文-編程實現(xiàn)TELNET協(xié)議的基本功能_第2頁
畢業(yè)論文-編程實現(xiàn)TELNET協(xié)議的基本功能_第3頁
畢業(yè)論文-編程實現(xiàn)TELNET協(xié)議的基本功能_第4頁
畢業(yè)論文-編程實現(xiàn)TELNET協(xié)議的基本功能_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計任務書專業(yè):計算機科學與技術學號:學生姓名:小組題目:編程實現(xiàn)telnet協(xié)議的基本功能1> telnet協(xié)議允許用戶用一臺終端來訪問遠程的主機,它允許終端于主 機之間以半雙工的方式交換信息,可參閱rfc8646-13e本次設計要求利用vb 實現(xiàn)telnet協(xié)議的基本功能2、任務分工:(1) 、遠程主機設置(ubuntu);()(2) 、設計原理分析,程序編寫,報告書寫;()(3) 、程序編寫、調(diào)試及截圖;()(4) 、程序編寫、調(diào)試及截圖。()設計時間與安排1、設計時間:2周2、設計時間安排:2016.6.242016.7.7熟悉實驗設備、收集資料:3天設計圖紙、實驗、計算、程

2、序編寫調(diào)試:8天編寫課程設計報告:2天答辯:1天(一)設計題目:telnet (遠程登錄)協(xié)議(二)設計要求:telnet協(xié)議允許用戶用_臺終端來訪問遠程的主機,它允許終端于主 機之間以半雙工的方式交換信息,可參閱rfc8646-13o本次設計要求利用vb 實現(xiàn)telnet協(xié)議的基本功能(三)協(xié)議介紹:3.1 簡介telnet協(xié)議是tcp/ip協(xié)議族中的一員是internet遠程登陸服務的標準協(xié)議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。在終 端使用者的電腦上使用telnet程序用它連接到服務器。終端使用者可以在telnet 程序中輸入命令,這些命令會在服務器上運行,就像

3、直接在服務器的控制臺上輸 入一樣??梢栽诒镜鼐湍芸刂品掌?。要開始一個tel net會話,必須輸入用戶名 和密碼來登錄服務器。telnet是常用的遠程控制web服務器的方法。3.2 登錄先來看看什么叫登錄:分時系統(tǒng)允許多個用戶同時使用一臺計算機,為了保 證系統(tǒng)的安全和記賬方便,系統(tǒng)要求每個用戶有單獨的帳號作為登錄標識,系統(tǒng) 還為每個用戶指定了f口令。用戶在使用該系統(tǒng)之前要輸入標識和口令,這個過程被稱為登錄;遠程登錄是指用戶使用telnet命令,使自己的計算機暫時 成為遠程主機的一個仿真終端的過程。仿真終端等效于f非智能的機器,它只 負責把用戶輸入的每個字符傳遞給主機,再將主機輸出的每個信息回顯

4、在屏幕上。33 工作過程使用telnet協(xié)議進行遠程登錄時需要滿足以下條件:在本地計算機上必須裝有包含telnet協(xié)議的客戶程序;必須知道遠程主機的ip地址或域名;必須知 道登錄標識與令。telnet遠程登錄服務分為以下4個過程: 1)本地與遠程主機建立連接。該過程實際上是建立一個tcp連接,用戶必須知 道遠莊機的ip地址或域名;2 )將本地終端上輸入的用戶名和令及以后輸入的田可命令或字符以nvt( net virtual terminal)格式傳送到遠程主機。該過程實際上是從本地主機向遠程主機 發(fā)數(shù)據(jù)包;3 )將遠程主機輸出的nvt格式的數(shù)據(jù)轉化為本地所接受的格式送回本地終端, 包括輸入命令

5、回顯和命令執(zhí)行結果;4 )最后,本地終端對遠駐機進行撤消連接。該過爾散銷f tcp連接。3.4基本概念telnet協(xié)議建立在三個主要的思想之上:(1) 虛擬終端(2 )選項協(xié)商方法(3 )通信雙方地飭舞3.4.1nvt (網(wǎng)絡虛擬終端)telnet使用網(wǎng)絡虛擬終端字符集來處理異構系統(tǒng)的遠程登錄問題。網(wǎng)絡虛擬終端字符集是f 通用借口 ,通過該借口,telent客戶端將來自本地終端 的字符(數(shù)據(jù)或命令)轉換成nvt形式,然后交付網(wǎng)絡。而telnet服務器講來 自n vt形式的字符(數(shù)據(jù)或命令)轉換成計算機可接受的形式。3.4.2選項協(xié)商雙方在進行telnet連接時,要進彳趣頁協(xié)商.比如:使用字符方

6、式窗口的大小,終端的類型都要進行協(xié)商. 而協(xié)商是通過telnet所支持的命令來實現(xiàn)的.telnet的常用命令(具體的見tcp/ip詳解p303):se 240(f0)sb 250(fa)iac 255(ff)will 251(fb)do 253(fd)子選項結束子選項開始選項協(xié)商的第一個字節(jié)發(fā)送方激活選項(接收方同意激活選項) 接收方同意(發(fā)送方想讓接收方激活選項)wont 252(fc)接收方不同意dont 254(fe)接受方回應wont例如:"will x表示你是否同意我使用x選項do x 表示我同意你使用x選項telnet的常用選項代碼1(0x01)回顯(echo)3(0x0

7、3)抑制繼續(xù)進行(傳送一次i字符方式可以選擇這個選項) 24(0x18)終端類型31(0xlf)窗口大小32(0x20)終端速率 33(0x21)遠程流量控制 34(0x22)行方式36(0x24)環(huán)境變量協(xié)商流程圖3.43對稱性由于進行選項協(xié)商的兩端是完全對稱的任意 f 都有可能將對方的確 認命令當成是請求命令而再次發(fā)岀響應命令,這樣就會造成協(xié)商過程的無限循環(huán) (loop)。因此為了避免循環(huán)的發(fā)生,協(xié)商過程應遵循下面三個規(guī)則:(1) 只為選項的變化發(fā)出請求:(2) 接收到的請求如果要求進入已經(jīng)具有的狀態(tài),那么此請求將不被響應:(3) 當一端向另一端發(fā)送一齊協(xié)商命令時,(不管這個命令是請求還是

8、響 應命令),如果該選項的使用將影響到對方接受數(shù)據(jù)的處理”那么這 個命令應該被插入到該選項開始起作用的鐮流的首部。3.5 telnet命令格式:telnet 選項主機名(ip地址)選項包括:-8采用8位二進制傳輸-e屏蔽所有的退出 -l使用8位二進制輸出-a自動登錄-d 開關 debug 信息,可從/usr/adm/syslog 中看到(unix)-e escape_char設置退出字符-i user自動登錄時作為用戶名常用命令help聯(lián)機求助open后接ip地址或域名即可進行遠程登錄close正常結束遠程會話,回到命令方式display顯示工作參數(shù)mode進入行命令或字符方式send向遠程主

9、機傳送特殊字符(鍵入send?可顯示詳細字符)set設置工作參數(shù)(鍵入set?可顯示詳細參數(shù))status顯示狀態(tài)信息toggle改變工作參數(shù)(鍵入toggle?可顯示詳細參數(shù))人換碼符(escape character),在異常情況下退岀會話,回到命令方式 quit退出telnet,返回本地機z使telnet進入暫停狀態(tài)<cr> ;結束命令方式z返回telnet的會話方式(四)實現(xiàn)telnet協(xié)議using system;using system col lections. generic:using systcm. linq;usin£ system text;usi

10、ng system .threading .tasks;using systemnet;using system .net. sockets;using systcm. collections;namespace telnetclass program#rcgion定義一些變量/ <summary>/定義一些標識符。/ </summciry> readonly char i ac = convert. tochar(255) ;/標識符,代農(nóng)是一個 telnet 指令readonly char do二convert. tochar(253):/表示一方要求另一方使用,或

11、者確認你希望 另一方使用指定的選項。readonly char dont = convert. tochar (254) :/農(nóng)示一方要求另-方停止使用,或者確認 你不再希望另一方使用指定的選項。readonly char will = convert. tochar (251) ;/表示希栗開始使用或者確認所使用的是抬 定的選項。readonly char w0xt二convert. tochar(252) ;/表示拒絕使用或者繼續(xù)使用指定的選項 readonly (-har sb = convert. tochar (250) ;/農(nóng)示后面所跟的是對需要的選項的了談判 readonly c

12、har se = convert. tochar (240):/子談判參數(shù)的結束const char is = ' o'const char send 二 t'const char info 二'2 ; const char vak = ' 0 ; const char value 二 t ; const char esc 二'2 ; const char uservar 二'3 ;byte m_bybuff = new byte100000j;/流private arraylist m listoptions = new arrayli

13、st () ; /收到的控制信息 string m_strresp; /存儲準備發(fā)送的信息private socket s;/一個套接字ndregionstatic void main(string args)console. title = telnet4100507-chenxiaojunz/;/ consolebackgroundcolor = consol ecol orgreen;console foregroundcolor = consolccolor .red;實例化這個對象program p = new program();/啟動socket進行telnet連接p. doso

14、cket ();/ <sumniary>/啟動scocket,進行telnet操作/ </summary>private void dosocket ()console. writeline(”服務器端地址:");/輸入ip地址ipaddress import = ipaddressparse(consolereadlineo);獲得端口號console. writeline(,?服務器端口號:");int port 二in t. parse (consol c> readlineo);/建立一個socket對象,使用ipvd,使用流進行連接,

15、使用tcp/ip協(xié)議 s 二newsocket (addressfami ly. interxetwork, isockeltypc. stream, pr()l()c()ltyp巳.tcp );獲得一個連接地址對象(由ip地址和端口號構成)ipendpoint address =new ipendpoint(import, port);/說明此socket不是出于阻止模式s. blocking=false;s.beginconnect(address, delegate(iasyncresult ar)try獲得傳入的對象(此處對象是beingconnect的第三個參數(shù))socket soc

16、kl = (socket)ar.asyncstate;i f (sock 1. connected)asynccallback recievedata = new asynccallback(onrecievedata);sock1 beginreceive(m_bybuff, 0, m_bybuff length, socketflags none, recievedata, sockl);catch (except ion ex)consol e. wri teline (,?初始化接收信息出錯:"+ex. message);, s);此處是為了發(fā)送指令不停的循環(huán)發(fā)送要登錄的賬戶

17、和密碼等。whi1e (true)發(fā)送讀出的數(shù)據(jù)dispatchmessage(console. readline ();因為回車都沒有發(fā)送,在此處不上dispdtchiesseige("rn");/ right/ <summary>/當接收完成后,執(zhí)行的方法/ /summary/ <param namearx/param>private void onrecievedata(iasyncrcsult ar)/從參數(shù)中獲得給的sockrt對象socket sock 二(socket)ar. asyncstate;int nbytesrec 二sock

18、. endreccive(ar);如果有數(shù)據(jù)if (nbytesrec > 0)/講接收到的數(shù)據(jù)轉碼,順便轉成string型string sreceive = encoding. getencoding("utf-8"). gctstring(m bybuff, 0, nbytesrec);/聲明一個字符串,用來存貯解析過的字符申string ni_strline =for (int i = 0; i < nbytesrec; i+)char ch = convert. tochar(m bybuffi);switch (ch)case ' r :m_s

19、trline += convert.tostring("rn");break;case ' n :break;default:m_strline += converttostri昭(ch); break;tryint strlinelen 二 m strline. length;if (strlinclcn = 0)m_strline 二 convert. tostring(,rn,/):/建立一個流,把接收的信息存進mtoproccss +byte mtoprocess = new bytestrlinelen:for (int i = 0; i < str

20、linelen; i+)mtoprocessi二 convert. tobyte(m_strlinei_);對接收的信息進行處理string niouttext 二 processoptions (mtoprocess);if (mouttext !="”、console. write(mouttext);/接收完數(shù)據(jù),處理完字符串數(shù)據(jù)等一系列事物之后,開始回發(fā)數(shù)據(jù) respondtooptions();catch (exccption ex)throw new except ion (,z接收數(shù)據(jù)的時候出錯了! " + ex. message);else/如果沒有接收到任

21、何數(shù)據(jù)的話/輸出關閉連接console. writeline("disconnected", sock. remoteendpoint);/ 關閉socketsock. shutdown(sockctshutdown. both);sock. close ();console. write("'game over");console> readlineo ; /right/ <summary>/發(fā)送數(shù)據(jù)的函數(shù)/ </summary>private void respondtooptions()try 聲明一個字符出,

22、來存儲接收到的參數(shù)string stroption;for (int i = 0; i < m_list0ptions .count; i+)/獲得一個控制信息參數(shù)stroption = (string)m listoptionsi;/根據(jù)這個參數(shù),進行處理arranger巳ply(stroption);dispatchmessagc(m strresp);m strresp = “; m_listoptions clear();catch (except!on ers)console. writelinec錯錯了,在回發(fā)數(shù)據(jù)的時候"+ ers. message); /righ

23、t/解析接收的數(shù)據(jù),牛成最終用戶看到的有效文字,同時將附帶的參數(shù)存儲起來 private string processoptions(byte m strlinetoprocess)string m_dtsplaytext ="“;string m strtcmp = “;string m.stroption ="“;string m strnormaltext = “;bool bscandone 二 false;int ndx = 0;int lclx = 0;char ch;try/把數(shù)據(jù)從byte轉化成stringfor (int i = 0; i < m s

24、trlinctoprocess. length; i+)char ss 二 convert. tochar(m_strlinetoprocessi); m_strtemp 二 m strtemp + convert. tostring(ss);此處意義為,當沒描完數(shù)據(jù)前,執(zhí)行掃描while (bscandone != true)int lensmk 二 m strtemp. length;ndx = m strtemp. indexof ('onvert. tostring (iac):if (ndx > lensmk)ndx = m strtemp. lenglh;if (nd

25、x != -1)#region/將標志位iac的字符賦值給最終顯示文字m displaytext += m strtemp. substring(0, ndx);/此處獲得命令碼ch 二 m_strtempndx + 1;if (ch = do | ch = dont | ch = will | ch = wont) m stroption = m strtemp. substring(ndx, 3); m_listoptions. add(m_stroption);/將標志位mc的字符賦值給最終顯示文字 m displaytext += m strtemp. substring(0, ndx

26、);string txt = mstrtemp. substring(ndx + 3);m strtemp = txt;/如果iac后而又跟了個iac (255)else 辻(ch = iac)則顯示從輸入的字符串頭開始,到之前的iac結束 m_dtsplaytext = m_strtemp. substring(0, ndx);/z后將處理過的字符串排除出去 m_strtcmp = m_strtcmp. substring(ndx + 1):/如果i ac后面跟的是sb (250)else if (ch = sb)m_dtsplaytext = m_strtemp. substring(0,

27、 ndx): ldx = m_strtemp. indexof(converttostring(se); m_str0ption = m_strtemp. substring(ndx, ldx); m listoptions< add(m stroption);m_strtcmp = m_strtcmpsubstring(ldx);sendregion/若字符串里已經(jīng)沒有iac標志位了elsem_displaytext 二 m_displaytext + ncslrtemp; bscandone = true;m strnormaltext 二 m displaytext;catch (

28、exception ep)throw new except ion (,z解析傳入的字符串錯誤:"+ ep. message); return m_strnorinaltext; / rightregion magic function/解析傳過來的參數(shù),生成冋發(fā)的數(shù)據(jù)到m.strresp private void arrangercply(string stroption)trychar verb;char option;char modifier;char ch;bool bdefined 二 false;if (stroption .length < 3) return;

29、verb = stroptionl;option = stroption2;/如果選項碼為回顯(1)或者是抑制繼續(xù)進行(3)if (option 二二 1 | option = 3)bdefincd = true;)m_strresp +二 iac;/如果選項碼為冋顯(1)或者是抑制繼續(xù)進行(3) -true if (bdefined = true)#region繼續(xù)判斷辻(verb 二二 do)ch = will;m_strrcsp += ch;m strresp += option;if (verb 二二 dont)ch = wont;m strresp += ch;m_strresp +

30、二 option;if (verb = will)ch = do;m_strresp +二 ch;m_strresp +二 option;if (verb = wont)ch = dont;m_strresp +二 ch;m strresp += option;if (verb = sb)mod i f i er = stroption3;if (modifier = send)ch = sb;m_strresp +二 ch;m strresp += option;m_strrcsp += is;m_strresp += tac;m_strresp +二 se;)#endregionelse#

31、region底下一系列代表,無論你發(fā)那種請求,我都不干 if (verb = do)ch = wont;mstrrcsp += ch;m strresp += option;if (verb = doxt)ch = wont;m strresp += ch; m_strresp +二 option;if (verb = will)ch = dont;m_strresp += ch;m_strresp += option;if (verb = wont)ch = dont;m_strresp +二 ch;m strresp += option;#endregioncatch (exception

32、 eeeee)throw new except ion (z,解析參數(shù)時出錯:"+ eeeee. message);/括號無措void dispatchmessage(string strtext)try/申請一個與字符串相當長度的ch"流byte smk = now bytestrtext. length;for (int i = 0; i < strtext.length; i+)/解析字符串,將其存儲到char流中去byte ss = convert. tobyte(strtexti); smki = ss;iasyncresult ar2 = s.begins

33、end(smk, 0, smk.length, socketflags.none, delegate(lsyncresult ar)socket sockl = (socket)arasyncstatc;if (sock1 connected)asynccallback recievedata 二 newasynccallback(onrecievedata);sock 1. beginreceive(m bybuff, 0, m bybuff length,socketflags none, recievedata, sockl);, s );s. endsend(ar2);catch (e

34、xcept ion ers)console. writeline("出錯了,在冋發(fā)數(shù)據(jù)的時候:"+ ers. message);#endregion(五)實驗截圖5.1先知道遠程主機的ip地址:終端 文件(f)編輯(日 查看(v)搜索(s)終端(t)幫助(h)q ' root(q)chenxiaojun-vlrtuabmachine: *chenxiaojunchenxtaojun-vtrtual-nachtne:-*$ sudo -t sudo password for chenxtaojun:9 rootgchenxiaojun-virtual-machine:

35、*# tfconfig ethe link encap:以太網(wǎng) 礎件地址 o0:6c:29:d8:63:fe tnet 地址:34 廣播:55 掩 繩h遠系于 lnet6 地址:fe80:20c:29ff:fed8:63fe/64 scope:linup broadcast running multicast mtu: 1500 趺點數(shù):多接收數(shù)據(jù)包:545錯誤泊丟棄泊過載:6楨數(shù)泊'發(fā)送數(shù)搖包:581錯誤泊丟棄泊過敦詢載波泊m ip碰撞:o發(fā)送隊列長度:ieee如ur 主# "ac ( “a v a 乂my 空#/心 v5.2windows下telnet命令登錄遠程主機:vbuau 2.5|cvirtual nchinc logi j cbenxiciojunon ptt/2 x86百 tdneu92.168.3013?tenet 192468.10.1"oottchenx&aojun-virtual vwichine :ni dir 1 as枝関" *oot9chenxiaojun-virtual-vmichino :*1 dir -all即3 %卽3 1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論