發(fā)送icmp echo請(qǐng)求_第1頁(yè)
發(fā)送icmp echo請(qǐng)求_第2頁(yè)
發(fā)送icmp echo請(qǐng)求_第3頁(yè)
發(fā)送icmp echo請(qǐng)求_第4頁(yè)
發(fā)送icmp echo請(qǐng)求_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 西北工業(yè)大學(xué)<<計(jì)算機(jī)網(wǎng)絡(luò)原理>> project專用紙 No8題目:發(fā)送icmp echo請(qǐng)求姓名: 學(xué)號(hào) 班號(hào): 時(shí)間:2016/11/16計(jì)算機(jī)學(xué)院時(shí)間:2016/11/16目 錄摘 要1 目的12 要求13相關(guān)知識(shí)14實(shí)現(xiàn)原理及流程圖錯(cuò)誤!未定義書簽。5程序代碼76運(yùn)行結(jié)果與分析77參考文獻(xiàn)15題目:發(fā)送icmp echo請(qǐng)求1、 目的 理解ICMP協(xié)議完成的功能,了解ICMP報(bào)文格式,理解Ping程序的工作原理。2、要求針對(duì)某個(gè)主機(jī)發(fā)送ICMP echo報(bào)文。2、 相關(guān)知識(shí)ICMP報(bào)文分析一.概述:1.   ICMP允許主機(jī)或路

2、由報(bào)告差錯(cuò)情況和提供有關(guān)異常情況。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。通常ICMP報(bào)文被IP層或更高層協(xié)議(TCP或UDP)使用。一些ICMP報(bào)文把差錯(cuò)報(bào)文返回給用戶進(jìn)程。2.   ICMP報(bào)文作為IP層數(shù)據(jù)報(bào)的數(shù)據(jù),加上數(shù)據(jù)報(bào)的首部,組成數(shù)據(jù)報(bào)發(fā)送出去。3.   ICMP報(bào)文的種類有兩種,即ICMP差錯(cuò)報(bào)告報(bào)文和ICMP詢問(wèn)報(bào)文。二.ICMP報(bào)文的格式1.   類型:占8位2.   代碼:占8位3.   檢驗(yàn)和

3、:占16位說(shuō)明:ICMP所有報(bào)文的前4個(gè)字節(jié)都是一樣的,但是剩下的其他字節(jié)則互不相同。4.   其它字段都ICMP報(bào)文類型不同而不同。1>  ICMP報(bào)文的前4個(gè)字節(jié)是統(tǒng)一的格式,共有三個(gè)字段:即類型,代碼和檢驗(yàn)和。2>  8位類型和8位代碼字段一起決定了ICMP報(bào)文的類型。類型8,代碼0:表示回顯請(qǐng)求(ping請(qǐng)求)。類型0,代碼0:表示回顯應(yīng)答(ping應(yīng)答)類型11,代碼0:超時(shí)3>16位的檢驗(yàn)和字段:包括數(shù)據(jù)在內(nèi)的整個(gè)ICMP數(shù)據(jù)包的檢驗(yàn)和;其計(jì)算方法和IP頭部檢驗(yàn)和的計(jì)算方法一樣的。ICMP報(bào)文具體分為查詢報(bào)文和差錯(cuò)

4、報(bào)文(對(duì)ICMP差錯(cuò)報(bào)文有時(shí)需要做特殊處理,因此要對(duì)其進(jìn)行區(qū)分。如:對(duì)ICMP差錯(cuò)報(bào)文進(jìn)行響應(yīng)時(shí),永遠(yuǎn)不會(huì)生成另一份ICMP差錯(cuò)報(bào)文,否則會(huì)出現(xiàn)死循環(huán))三.ICMP差錯(cuò)報(bào)文(56字節(jié))1.   ICMP差錯(cuò)報(bào)告報(bào)文共有5種1>  終點(diǎn)不可達(dá):終點(diǎn)不可達(dá)分為:網(wǎng)絡(luò)不可達(dá),主機(jī)不可達(dá),協(xié)議不可達(dá),端口不可達(dá),需要分片但DF比特已置為1,以及源路由失敗等六種情況,其代碼字段分別置為0至5。當(dāng)出現(xiàn)以上六種情況時(shí)就向源站發(fā)送終點(diǎn)不可達(dá)報(bào)文。說(shuō)明:端口不可達(dá):UDP的規(guī)則之一是:如果收到UDP數(shù)據(jù)報(bào)而且目的端口與某個(gè)正在使用的進(jìn)程不相符,那么UDP返回一個(gè)IC

5、MP不可達(dá)報(bào)文。2>  源站抑制:當(dāng)路由器或主機(jī)由于擁塞而丟棄數(shù)據(jù)報(bào)時(shí),就向源站發(fā)送源站抑制報(bào)文,使源站知道應(yīng)當(dāng)將數(shù)據(jù)報(bào)的發(fā)送速率放慢。3>  時(shí)間超過(guò):當(dāng)路由器收到生存時(shí)間為零的數(shù)據(jù)報(bào)時(shí),除丟棄該數(shù)據(jù)報(bào)外,還要向源站發(fā)送時(shí)間超過(guò)報(bào)文。當(dāng)目的站在預(yù)先規(guī)定的時(shí)間內(nèi)不能收到一個(gè)數(shù)據(jù)報(bào)的全部數(shù)據(jù)報(bào)片時(shí),就將已收到的數(shù)據(jù)報(bào)片都丟棄,并向源站發(fā)送時(shí)間超過(guò)報(bào)文。4>  參數(shù)問(wèn)題:當(dāng)路由器或目的主機(jī)收到的數(shù)據(jù)報(bào)的首部中的字段的值不正確時(shí),就丟棄該數(shù)據(jù)報(bào),并向源站發(fā)送參數(shù)問(wèn)題報(bào)文。5>  改變路由(重定向)路由器將改變路由報(bào)文發(fā)送給主機(jī),讓主機(jī)知

6、道下次應(yīng)將數(shù)據(jù)報(bào)發(fā)送給另外的路由器。說(shuō)明:以下幾種情況都不會(huì)導(dǎo)致產(chǎn)生ICMP差錯(cuò)報(bào)文1>ICMP差錯(cuò)報(bào)文(但是,ICMP查詢報(bào)文可能會(huì)產(chǎn)生ICMP差錯(cuò)報(bào)文)2>目的地址是廣播地址或多播地址的IP數(shù)據(jù)報(bào)3>作為鏈路層廣播的數(shù)據(jù)報(bào)4>不是IP分片的第一片5>源地址不是單個(gè)主機(jī)的數(shù)據(jù)報(bào)。即源地址不能為零地址、環(huán)回地址、廣播地址或多播地址。這些規(guī)則是為了防止過(guò)去允許ICMP差錯(cuò)報(bào)文對(duì)廣播分組響應(yīng)所帶來(lái)的廣播風(fēng)暴。2.所有的ICMP差錯(cuò)報(bào)告報(bào)文中的數(shù)據(jù)字段都具有同樣的格式。將收到的需要進(jìn)行差錯(cuò)報(bào)告IP數(shù)據(jù)報(bào)的首部和數(shù)據(jù)字段的前8個(gè)字節(jié)提取出來(lái),作為ICMP報(bào)文的數(shù)據(jù)字段。再

7、加上響應(yīng)的ICMP差錯(cuò)報(bào)告報(bào)文的前8個(gè)字節(jié),就構(gòu)成了ICMP差錯(cuò)報(bào)告報(bào)文。提取收到的數(shù)據(jù)報(bào)的數(shù)據(jù)字段的前8個(gè)字節(jié)是為了得到運(yùn)輸層的端口號(hào)(對(duì)于TCP和UDP)以及運(yùn)輸層報(bào)文的發(fā)送序號(hào)(對(duì)于TCP)。注:一下情況不發(fā)送ICMP差錯(cuò)報(bào)告報(bào)文四.ICMP詢問(wèn)報(bào)文(40字節(jié))1.ICMP詢問(wèn)報(bào)文有四種回送請(qǐng)求和回答,時(shí)間戳請(qǐng)求和回答,掩碼地址請(qǐng)求和回答,以及路由器詢問(wèn)和通過(guò)。1>ICMP回送請(qǐng)求報(bào)文是由主機(jī)或路由器向一個(gè)特定的目的主機(jī)發(fā)出的詢問(wèn)。收到此報(bào)文的機(jī)器必須給源主機(jī)發(fā)送ICMP回送應(yīng)答報(bào)文。這種詢問(wèn)報(bào)文用來(lái)測(cè)試目的站是否可達(dá)以及了解其有關(guān)狀態(tài)。2>ICMP時(shí)間戳請(qǐng)求允許系統(tǒng)向另一個(gè)

8、系統(tǒng)查詢當(dāng)前的時(shí)間。該ICMP報(bào)文的好處是它提供了毫秒級(jí)的分辨率,而利用其他方法從別的主機(jī)獲取的時(shí)間只能提供秒級(jí)的分辨率。請(qǐng)求端填寫發(fā)起時(shí)間,然后發(fā)送報(bào)文。應(yīng)答系統(tǒng)收到請(qǐng)求報(bào)文時(shí)填寫接收時(shí)間戳,在發(fā)送應(yīng)答時(shí)填寫發(fā)送時(shí)間戳。大多數(shù)的實(shí)現(xiàn)是把后面兩個(gè)字段都設(shè)成相同的值。3>主機(jī)使用ICMP地址掩碼請(qǐng)求報(bào)文可向子網(wǎng)掩碼服務(wù)器得到某個(gè)接口的地址掩碼。系統(tǒng)廣播它的ICMP請(qǐng)求報(bào)文。ICMP報(bào)文中的標(biāo)識(shí)符和序列號(hào)字段由發(fā)送端任意選擇設(shè)定,這些值在應(yīng)答中將被返回,這樣,發(fā)送端就可以把應(yīng)答與請(qǐng)求進(jìn)行匹配。4>主機(jī)使用ICMP路由器詢問(wèn)和通過(guò)報(bào)文可了解連接在本網(wǎng)絡(luò)上的路由器是否正常工作。主機(jī)將路由器

9、詢問(wèn)報(bào)文進(jìn)行廣播(或多播)。收到詢問(wèn)報(bào)文的一個(gè)或幾個(gè)路由器就使用路由器通過(guò)報(bào)文廣播其路由選擇信息4、實(shí)現(xiàn)原理及流程圖實(shí)現(xiàn)原理:/定義IP首部格式typedef struct _IPHeader u_char VIHL; /版本和首部長(zhǎng)度u_char ToS; /服務(wù)類型u_short TotalLen; /總長(zhǎng)度u_short ID; /標(biāo)識(shí)號(hào)u_short Frag_Flags; /片偏移量u_char TTL; /生存時(shí)間u_char Protocol; /協(xié)議u_short Checksum; /首部校驗(yàn)和struct in_addr SrcIP; /源IP地址struct in_add

10、r DestIP; /目的地址IPHDR, *PIPHDR;/定義ICMP首部格式typedef struct _ICMPHeader u_char Type; /類型u_char Code; /代碼u_short Checksum; /首部校驗(yàn)和u_short ID; /標(biāo)識(shí)u_short Seq; /序列號(hào)char Data; /數(shù)據(jù)ICMPHDR, *PICMPHDR;/定義ICMP回應(yīng)請(qǐng)求typedef struct _ECHOREQUEST ICMPHDR icmpHdr;DWORD dwTime;char cDataREQ_DATASIZE;ECHOREQUEST, *PECHOR

11、EQUEST;/定義ICMP回應(yīng)答復(fù)typedef struct _ECHOREPLY IPHDR ipHdr;ECHOREQUEST echoRequest;char cFiller256;ECHOREPLY, *PECHOREPLY;/計(jì)算校驗(yàn)和u_short checksum(u_short *buffer, int len) register int nleft = len;register u_short *w = buffer;register u_short answer;register int sum = 0;/使用32位累加器,進(jìn)行16位的反饋計(jì)算while (nleft

12、> 1) sum += *w+;nleft -= 2;/補(bǔ)全奇數(shù)位if (nleft = 1) u_short u = 0;*(u_char *)(&u) = *(u_char*)w;sum += u;/將反饋的16位從高位移到低位sum = (sum >> 16) + (sum & 0xffff);sum += (sum >> 16);answer = sum;return (answer);/發(fā)送回應(yīng)請(qǐng)求函數(shù)int SendEchoRequest(SOCKET s, struct sockaddr_in *lpstToAddr) static

13、ECHOREQUEST echoReq;static int nId = 1;static int nSeq = 1;int nRet;/填充回應(yīng)請(qǐng)求消息echoReq.icmpHdr.Type = ICMP_ECHOREQ;echoReq.icmpHdr.Code = 0;echoReq.icmpHdr.Checksum = 0;echoReq.icmpHdr.ID = nId+;echoReq.icmpHdr.Seq = nSeq+;/填充要發(fā)送的數(shù)據(jù)for (nRet = 0; nRet < REQ_DATASIZE; nRet+) echoReq.cDatanRet = '1' + nRet;/存儲(chǔ)發(fā)送的時(shí)間echoReq.dwTime = timeGetTime();/計(jì)算回應(yīng)請(qǐng)求的校驗(yàn)和echoReq.icmpHdr.Checksum = checksum(u_short*)&echoReq, sizeof(ECHOREQUEST);/發(fā)送回應(yīng)請(qǐng)求nRet = sendto(s, (LPSTR)&echoReq, sizeof(ECHOREQUEST),0, (struct sockaddr*)lpstToAdd

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論