

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計報告</b></p><p> 課程名稱 計算機(jī)通信技術(shù)課程設(shè)計______</p><p> 設(shè)計題目 編寫一個TCP報文分析小工具_(dá)__</p><p> 指導(dǎo)教師(簽名): 2011.06.12 教研室主任(簽名):2011.06.11</p><p&g
2、t;<b> 目錄</b></p><p><b> 1 目的及要求</b></p><p> 1.1 課程設(shè)計目的</p><p> 本課程設(shè)計是計算機(jī)科學(xué)與技術(shù)專業(yè)、網(wǎng)絡(luò)工程專業(yè)重要的實踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《計算機(jī)通信技術(shù)》課程后進(jìn)行的一次全面的綜合練習(xí)。通過課程設(shè)計,使學(xué)生進(jìn)一步掌握計算機(jī)網(wǎng)絡(luò)通信的基
3、本方法;網(wǎng)絡(luò)協(xié)議的基本原理;掌握網(wǎng)絡(luò)通信和網(wǎng)絡(luò)協(xié)議的技術(shù)架構(gòu);深刻領(lǐng)會軟件設(shè)計方法;提高程序設(shè)計文檔的撰寫能力等。</p><p> 1.2 課程設(shè)計要求</p><p> 在提供的課程設(shè)計題目中任意選擇一題,題目選定后不可更換。</p><p> 要求在設(shè)計的過程中,完成清晰的功能設(shè)計。</p><p> 要求系統(tǒng)架構(gòu)合理,模塊劃分
4、清晰。</p><p> ?。?)用戶界面設(shè)計,以菜單形式體現(xiàn)各個功能,供用戶選擇。各功能之間原則上無先后次序。</p><p> ?。?)編寫程序代碼,調(diào)試程序使其能正確運行</p><p> (5)提交課程設(shè)計報告、相關(guān)文檔及源代碼。</p><p> 2 課程設(shè)計內(nèi)容說明</p><p> 2.1 課程設(shè)計
5、的題目</p><p> 編寫一個TCP報文分析小工具</p><p> 2.2 具體設(shè)計要求</p><p> 實現(xiàn)一個簡單的局域網(wǎng)報文抓取工具,對在網(wǎng)絡(luò)共享域中抓取的數(shù)據(jù)包進(jìn)行分析,并向屏幕輸出TCP報文頭部的每一個字段信息。</p><p><b> 要求:</b></p><p>
6、 能實現(xiàn)共享域的數(shù)據(jù)包抓取。</p><p> 對抓到的數(shù)據(jù)包進(jìn)行解析,要求能夠解析出數(shù)據(jù)包中TCP的報文頭部每一個域的信息。</p><p> 參考軟件wireshark。</p><p> 2.3 設(shè)計實現(xiàn)思路</p><p> 根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟:</p><p> 回顧TC
7、P協(xié)議報文頭部的格式。</p><p> 尋找網(wǎng)絡(luò)共享域中,數(shù)據(jù)包抓取的開發(fā)工具,目前比較常見的是WinPcap。</p><p> 利用WinPcap的數(shù)據(jù)包抓取功能,對抓到的數(shù)據(jù)包進(jìn)行過濾,分析。</p><p> 解析數(shù)據(jù)報文,輸出每一個域的對應(yīng)值。</p><p> 利用wireshark軟件,對輸出值進(jìn)行對比驗證軟件的功能和
8、正確性。</p><p> 2.4 實驗環(huán)境說明</p><p> 用VC++編譯抓包程序,用Winpcap實現(xiàn)數(shù)據(jù)包的抓取</p><p> 2.5課題的系統(tǒng)設(shè)計</p><p> 2.5.1 設(shè)計思路</p><p> ?。?)回顧TCP和IPV4的首部格式</p><p> 0
9、 4 8 16 24 32</p><p> 圖1 IPv4首部格式</p><p> IPv4首部格式說明:</p><p> 版本:4b,包含當(dāng)前運用的ip版本的信息</p><p> 首部長度:4b,以4B為單位的ip首部
10、的長度</p><p> TOS服務(wù)類型:8b指明當(dāng)前如何處理數(shù)據(jù)報文</p><p> 總長度:16b,以字節(jié)為單位的整個數(shù)據(jù)報文的長度</p><p> 標(biāo)示:16b,整數(shù),源主機(jī)賦予數(shù)據(jù)報的唯一標(biāo)識</p><p> 標(biāo)志:3b,只有低2位有效</p><p> 中間1位是DF標(biāo)志,為1是表示數(shù)據(jù)報不能
11、被分片,為0表示可以分片</p><p> 片偏移量:13b指出本數(shù)據(jù)報文片中數(shù)據(jù)相對于初始報文的數(shù)據(jù)偏移量,以8字節(jié)為單位計算偏移量</p><p> TTL:1byte,設(shè)計的初衷是用來指明數(shù)據(jù)報在互聯(lián)網(wǎng)上的允許保留的時間以秒為單位</p><p> 協(xié)議:1字節(jié),指明數(shù)據(jù)報數(shù)據(jù)區(qū)的格式</p><p> 首部校驗和:16b用于首
12、部的校驗</p><p> 源地址和目標(biāo)ip地址:各占32b指明數(shù)據(jù)報的發(fā)送者和最終的接受者</p><p> ip選項,長度可變,主要用于控制和測試兩大目的</p><p> 圖2 Tcp報文的首部</p><p> Tcp報文的首部格式說明:</p><p> 源端口和目的端口,端口是傳輸層和應(yīng)用層的接
13、口</p><p> 序號:tcp是面向字節(jié)流的,tcp傳輸?shù)膱笪目梢钥醋鍪沁B續(xù)的字節(jié)流</p><p> 確認(rèn)號:希望收到的下一個報文首部字段的序列號的值</p><p> 數(shù)據(jù)偏移:指出tcp報文段的首部長度,以 4byte為單位</p><p> 標(biāo)志位:用于區(qū)分不同類型的tcp報文</p><p>
14、窗口:該字段在傳輸過程中,動態(tài)變化,表明允許對方發(fā)送的數(shù)據(jù)量</p><p> 校驗和:檢驗和字段檢查的范圍包括偽首部,tcp首部和數(shù)據(jù)部分</p><p> 緊急指針:只在url=1時才使用,指明該報文中有緊急數(shù)據(jù)的字節(jié)數(shù),偽首部中的協(xié)議字段值一般為6</p><p> 選項:長度可變0—40byte</p><p> ?。?)確定開
15、發(fā)工具。確定使用VC++和Winpcap開發(fā)工具來實現(xiàn)共享域中數(shù)據(jù)包的抓取。</p><p> ?。?)上網(wǎng)查閱關(guān)于Winpcap的使用方法和抓取數(shù)據(jù)包所要用的各種函數(shù)。</p><p> ?。?)用VC++編程來具體實現(xiàn)數(shù)據(jù)包的抓取。</p><p> (5)首先獲先利用Winpcap中的pcap_findalldevs函數(shù)來獲得網(wǎng)卡列表,并將其打印出來。<
16、;/p><p> ?。?)利用Winpcap中的pcap_open_live函數(shù)來打開選擇的網(wǎng)卡。</p><p> ?。?)利用Winpcap中的pcap_compile來起到過濾作用,只接受TCP和IPV4的內(nèi)容</p><p> ?。?)使用回調(diào)函數(shù)pcap_loop(adhandle, 10, packet_handler, NULL)來捕獲數(shù)據(jù)包,并打印TCP
17、的報文首部</p><p> 2.5.2 系統(tǒng)功能模塊圖</p><p> 圖3 系統(tǒng)功能模塊圖</p><p> 2.5.3系統(tǒng)流程圖</p><p> 2.5.4 關(guān)鍵程序代碼</p><p><b> main()</b></p><p><b>
18、 {</b></p><p> pcap_if_t *alldevs;</p><p> pcap_if_t *d;</p><p><b> int inum;</b></p><p><b> int i=0;</b></p><p> pcap_
19、t *adhandle;</p><p> char errbuf[PCAP_ERRBUF_SIZE];</p><p> u_int netmask;</p><p> struct bpf_program fcode;</p><p><b> char k;</b></p><p>
20、 /* 獲得網(wǎng)卡的列表 */</p><p> if (pcap_findalldevs(&alldevs, errbuf) == -1)</p><p><b> {</b></p><p> fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf)
21、;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> /* 打印網(wǎng)卡信息 */</p><p> for(d=alldevs; d; d=d->next)</p><p><b> {<
22、/b></p><p> printf("%d\n", ++i);</p><p> printf("%s\n", d->name);</p><p> if (d->description)</p><p> printf(" (%s)\n", d->
23、;description);</p><p><b> else</b></p><p> printf(" (No description available)\n");</p><p><b> }</b></p><p><b> if(i==0)<
24、/b></p><p><b> {</b></p><p> printf("\nNo interfaces found! Make sure WinPcap is installed.\n");</p><p> return -1;</p><p><b> }</
25、b></p><p> printf("Enter the interface number (1-%d):",i);</p><p> scanf("%d", &inum); //輸入要選擇打開的網(wǎng)卡號</p><p> if(inum < 1 || inum >
26、; i) //判斷號的合法性</p><p><b> {</b></p><p> printf("\nInterface number out of range.\n");</p><p> /* Free the device list */</p><p> pcap_freealld
27、evs(alldevs);</p><p> return -1;</p><p><b> }</b></p><p> /* 找到要選擇的網(wǎng)卡結(jié)構(gòu) */</p><p> for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);</p><
28、p> /* 打開選擇的網(wǎng)卡 */</p><p> if ( (adhandle= pcap_open_live(d->name, // 設(shè)備名稱</p><p> 65536, // portion of the packet to capture. </p><p> // 65536 grants that the whole pa
29、cket will be captured on all the MACs.</p><p> 1, // 混雜模式</p><p> 1000, // 讀超時為1秒</p><p> errbuf // error buffer</p><p> ) ) == NULL)</p>&
30、lt;p><b> {</b></p><p> fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");</p><p> /* Free the device list */</p><p> pcap
31、_freealldevs(alldevs);</p><p> return -1;</p><p><b> }</b></p><p> printf("\nlistening on %s...\n", d->description);</p><p> /* At this poi
32、nt, we don't need any more the device list. Free it */</p><p> pcap_freealldevs(alldevs);</p><p><b> /*過濾器*/</b></p><p> if (d->addresses != NULL) </p>
33、<p> /* 獲取接口第一個地址的掩碼 */ </p><p> netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; </p><p><b> else </b></p><p> /* 如果這個接口
34、沒有地址,那么我們假設(shè)這個接口在C類網(wǎng)絡(luò)中 */ </p><p> netmask=0xffffff; </p><p> //compile the filte </p><p> if (pcap_compile(adhandle, &fcode, "ip and tcp", 1, netmask) < 0) </
35、p><p><b> { </b></p><p> fprintf(stderr,"nUnable to compile the packet filter. Check the syntax.n"); </p><p> /* 釋放設(shè)備列表 */ </p><p> pcap_freealld
36、evs(alldevs); </p><p> return -1; </p><p><b> } </b></p><p> //set the filter </p><p> if (pcap_setfilter(adhandle, &fcode) < 0) </p><
37、p><b> { </b></p><p> fprintf(stderr,"nError setting the filter.n"); </p><p> /* 釋放設(shè)備列表 */ </p><p> pcap_freealldevs(alldevs); </p><p> ret
38、urn -1; </p><p><b> } </b></p><p> /* 開始捕獲包 */</p><p> pcap_loop(adhandle, 10, packet_handler, NULL);</p><p><b> while(1){</b></p>&l
39、t;p> printf("\n是否想要繼續(xù)抓包(Y/N): ");</p><p> getchar();</p><p> k=getchar();</p><p> if(k=='Y')</p><p> pcap_loop(adhandle, 10, packet_handler, N
40、ULL);</p><p> else if(k=='N')</p><p><b> break;</b></p><p><b> else {</b></p><p> printf("\n輸入不合法,請重新輸入?。n");</p>
41、<p><b> continue;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b>&
42、lt;/p><p><b> 2.6 調(diào)試過程</b></p><p> 圖4 運行結(jié)果示例1</p><p> 圖5 運行結(jié)果示例2</p><p> 圖6 運行結(jié)果示例3</p><p> 圖7 運行結(jié)果示例4</p><p> 圖8 運行結(jié)果示例5</p
43、><p> 圖9 運行結(jié)果示例6</p><p> 2.7 程序運行測試報告</p><p> 圖10 運行結(jié)果測試1</p><p> 圖11 運行結(jié)果測試2</p><p> 3 遇到的問題和解決方法</p><p> 在本次的課程設(shè)計中,我選擇了 題目A:編寫一個TCP報文分析小工
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 編寫一個計算器程序課程設(shè)計報告-范例
- 私教小工具培訓(xùn)
- java課程設(shè)計--編寫一個記事本程序
- java課程設(shè)計-編寫一個記事本程序
- 網(wǎng)絡(luò)課程設(shè)計報告----基于tcp的點對點即時通信工具
- 計算機(jī)控制小工具拋光技術(shù).pdf
- 課程設(shè)計--基于tcp的計算機(jī)通信工具編程實現(xiàn)
- gsm及cdma頻率頻點換算小工具
- javascript版base64編解碼小工具
- 課程設(shè)計--基于tcp的計算機(jī)通信工具編程實現(xiàn)
- 【小工具大幫手】課程實錄ppt
- 孤東油田新型機(jī)采配套小工具探討
- 廚房小工具產(chǎn)品開發(fā)之系列化設(shè)計研究.pdf
- [教育]張京生——自制小工具,維修克難題
- 設(shè)計一個完整的數(shù)據(jù)通信系統(tǒng)--數(shù)據(jù)通信課程設(shè)計
- 微機(jī)原理與接口課程設(shè)計--用匯編語言編寫一個時鐘程序
- java課程設(shè)計報告---設(shè)計一個多功能計算器
- java課程設(shè)計---設(shè)計一個記事本
- 課程設(shè)計--設(shè)計一個矩陣運算器
- 課程設(shè)計用c++設(shè)計一個排課程序
評論
0/150
提交評論