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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

2、序編寫調(diào)試:8天編寫課程設(shè)計(jì)報(bào)告:2天答辯:1天(一)設(shè)計(jì)題目:telnet (遠(yuǎn)程登錄)協(xié)議(二)設(shè)計(jì)要求:telnet協(xié)議允許用戶用_臺(tái)終端來訪問遠(yuǎn)程的主機(jī),它允許終端于主 機(jī)之間以半雙工的方式交換信息,可參閱rfc8646-13o本次設(shè)計(jì)要求利用vb 實(shí)現(xiàn)telnet協(xié)議的基本功能(三)協(xié)議介紹:3.1 簡介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)行,就像

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

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

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

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

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

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

9、機(jī)傳送特殊字符(鍵入send?可顯示詳細(xì)字符)set設(shè)置工作參數(shù)(鍵入set?可顯示詳細(xì)參數(shù))status顯示狀態(tài)信息toggle改變工作參數(shù)(鍵入toggle?可顯示詳細(xì)參數(shù))人換碼符(escape character),在異常情況下退岀會(huì)話,回到命令方式 quit退出telnet,返回本地機(jī)z使telnet進(jìn)入暫停狀態(tài)<cr> ;結(jié)束命令方式z返回telnet的會(huì)話方式(四)實(shí)現(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>/定義一些標(biāo)識(shí)符。/ </summciry> readonly char i ac = convert. tochar(255) ;/標(biāo)識(shí)符,代農(nóng)是一個(gè) telnet 指令readonly char do二convert. tochar(253):/表示一方要求另一方使用,或

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

12、har se = convert. tochar (240):/子談判參數(shù)的結(jié)束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; /存儲(chǔ)準(zhǔn)備發(fā)送的信息private socket s;/一個(gè)套接字ndregionstatic void main(string args)console. title = telnet4100507-chenxiaojunz/;/ consolebackgroundcolor = consol ecol orgreen;console foregroundcolor = consolccolor .red;實(shí)例化這個(gè)對(duì)象program p = new program();/啟動(dòng)socket進(jìn)行telnet連接p. doso

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

15、使用tcp/ip協(xié)議 s 二newsocket (addressfami ly. interxetwork, isockeltypc. stream, pr()l()c()ltyp巳.tcp );獲得一個(gè)連接地址對(duì)象(由ip地址和端口號(hào)構(gòu)成)ipendpoint address =new ipendpoint(import, port);/說明此socket不是出于阻止模式s. blocking=false;s.beginconnect(address, delegate(iasyncresult ar)try獲得傳入的對(duì)象(此處對(duì)象是beingconnect的第三個(gè)參數(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 (,?初始化接收信息出錯(cuò):"+ex. message);, s);此處是為了發(fā)送指令不停的循環(huán)發(fā)送要登錄的賬戶

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

18、. endreccive(ar);如果有數(shù)據(jù)if (nbytesrec > 0)/講接收到的數(shù)據(jù)轉(zhuǎn)碼,順便轉(zhuǎn)成string型string sreceive = encoding. getencoding("utf-8"). gctstring(m bybuff, 0, nbytesrec);/聲明一個(gè)字符串,用來存貯解析過的字符申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,/):/建立一個(gè)流,把接收的信息存進(jìn)mtoproccss +byte mtoprocess = new bytestrlinelen:for (int i = 0; i < str

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

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

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

23、t/解析接收的數(shù)據(jù),牛成最終用戶看到的有效文字,同時(shí)將附帶的參數(shù)存儲(chǔ)起來 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轉(zhuǎn)化成stringfor (int i = 0; i < m s

24、trlinctoprocess. length; i+)char ss 二 convert. tochar(m_strlinetoprocessi); m_strtemp 二 m strtemp + convert. tostring(ss);此處意義為,當(dāng)沒描完數(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/將標(biāo)志位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);/將標(biāo)志位mc的字符賦值給最終顯示文字 m displaytext += m strtemp. substring(0, ndx

26、);string txt = mstrtemp. substring(ndx + 3);m strtemp = txt;/如果iac后而又跟了個(gè)iac (255)else 辻(ch = iac)則顯示從輸入的字符串頭開始,到之前的iac結(jié)束 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標(biāo)志位了elsem_displaytext 二 m_displaytext + ncslrtemp; bscandone = true;m strnormaltext 二 m displaytext;catch (

28、exception ep)throw new except ion (,z解析傳入的字符串錯(cuò)誤:"+ 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;/如果選項(xiàng)碼為回顯(1)或者是抑制繼續(xù)進(jìn)行(3)if (option 二二 1 | option = 3)bdefincd = true;)m_strresp +二 iac;/如果選項(xiàng)碼為冋顯(1)或者是抑制繼續(xù)進(jìn)行(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ā)那種請(qǐng)求,我都不干 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ù)時(shí)出錯(cuò):"+ eeeee. message);/括號(hào)無措void dispatchmessage(string strtext)try/申請(qǐng)一個(gè)與字符串相當(dāng)長度的ch"流byte smk = now bytestrtext. length;for (int i = 0; i < strtext.length; i+)/解析字符串,將其存儲(chǔ)到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("出錯(cuò)了,在冋發(fā)數(shù)據(jù)的時(shí)候:"+ ers. message);#endregion(五)實(shí)驗(yàn)截圖5.1先知道遠(yuǎn)程主機(jī)的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) 礎(chǔ)件地址 o0:6c:29:d8:63:fe tnet 地址:34 廣播:55 掩 繩h遠(yuǎn)系于 lnet6 地址:fe80:20c:29ff:fed8:63fe/64 scope:linup broadcast running multicast mtu: 1500 趺點(diǎn)數(shù):多接收數(shù)據(jù)包:545錯(cuò)誤泊丟棄泊過載:6楨數(shù)泊'發(fā)送數(shù)搖包:581錯(cuò)誤泊丟棄泊過敦詢載波泊m ip碰撞:o發(fā)送隊(duì)列長度:ieee如ur 主# "ac ( “a v a 乂my 空#/心 v5.2windows下telnet命令登錄遠(yuǎn)程主機(jī):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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論