版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 課程名稱 計算機通信技術課程設計______</p><p> 設計題目 編寫一個TCP報文分析小工具___</p><p> 指導教師(簽名): 2011.06.12 教研室主任(簽名):2011.06.11</p><p&g
2、t;<b> 目錄</b></p><p><b> 1 目的及要求</b></p><p> 1.1 課程設計目的</p><p> 本課程設計是計算機科學與技術專業(yè)、網絡工程專業(yè)重要的實踐性環(huán)節(jié)之一,是在學生學習完《計算機通信技術》課程后進行的一次全面的綜合練習。通過課程設計,使學生進一步掌握計算機網絡通信的基
3、本方法;網絡協(xié)議的基本原理;掌握網絡通信和網絡協(xié)議的技術架構;深刻領會軟件設計方法;提高程序設計文檔的撰寫能力等。</p><p> 1.2 課程設計要求</p><p> 在提供的課程設計題目中任意選擇一題,題目選定后不可更換。</p><p> 要求在設計的過程中,完成清晰的功能設計。</p><p> 要求系統(tǒng)架構合理,模塊劃分
4、清晰。</p><p> ?。?)用戶界面設計,以菜單形式體現各個功能,供用戶選擇。各功能之間原則上無先后次序。</p><p> ?。?)編寫程序代碼,調試程序使其能正確運行</p><p> ?。?)提交課程設計報告、相關文檔及源代碼。</p><p> 2 課程設計內容說明</p><p> 2.1 課程設計
5、的題目</p><p> 編寫一個TCP報文分析小工具</p><p> 2.2 具體設計要求</p><p> 實現一個簡單的局域網報文抓取工具,對在網絡共享域中抓取的數據包進行分析,并向屏幕輸出TCP報文頭部的每一個字段信息。</p><p><b> 要求:</b></p><p>
6、 能實現共享域的數據包抓取。</p><p> 對抓到的數據包進行解析,要求能夠解析出數據包中TCP的報文頭部每一個域的信息。</p><p> 參考軟件wireshark。</p><p> 2.3 設計實現思路</p><p> 根據系統(tǒng)功能要求,可以將問題解決分為以下步驟:</p><p> 回顧TC
7、P協(xié)議報文頭部的格式。</p><p> 尋找網絡共享域中,數據包抓取的開發(fā)工具,目前比較常見的是WinPcap。</p><p> 利用WinPcap的數據包抓取功能,對抓到的數據包進行過濾,分析。</p><p> 解析數據報文,輸出每一個域的對應值。</p><p> 利用wireshark軟件,對輸出值進行對比驗證軟件的功能和
8、正確性。</p><p> 2.4 實驗環(huán)境說明</p><p> 用VC++編譯抓包程序,用Winpcap實現數據包的抓取</p><p> 2.5課題的系統(tǒng)設計</p><p> 2.5.1 設計思路</p><p> ?。?)回顧TCP和IPV4的首部格式</p><p> 0
9、 4 8 16 24 32</p><p> 圖1 IPv4首部格式</p><p> IPv4首部格式說明:</p><p> 版本:4b,包含當前運用的ip版本的信息</p><p> 首部長度:4b,以4B為單位的ip首部
10、的長度</p><p> TOS服務類型:8b指明當前如何處理數據報文</p><p> 總長度:16b,以字節(jié)為單位的整個數據報文的長度</p><p> 標示:16b,整數,源主機賦予數據報的唯一標識</p><p> 標志:3b,只有低2位有效</p><p> 中間1位是DF標志,為1是表示數據報不能
11、被分片,為0表示可以分片</p><p> 片偏移量:13b指出本數據報文片中數據相對于初始報文的數據偏移量,以8字節(jié)為單位計算偏移量</p><p> TTL:1byte,設計的初衷是用來指明數據報在互聯網上的允許保留的時間以秒為單位</p><p> 協(xié)議:1字節(jié),指明數據報數據區(qū)的格式</p><p> 首部校驗和:16b用于首
12、部的校驗</p><p> 源地址和目標ip地址:各占32b指明數據報的發(fā)送者和最終的接受者</p><p> ip選項,長度可變,主要用于控制和測試兩大目的</p><p> 圖2 Tcp報文的首部</p><p> Tcp報文的首部格式說明:</p><p> 源端口和目的端口,端口是傳輸層和應用層的接
13、口</p><p> 序號:tcp是面向字節(jié)流的,tcp傳輸的報文可以看做是連續(xù)的字節(jié)流</p><p> 確認號:希望收到的下一個報文首部字段的序列號的值</p><p> 數據偏移:指出tcp報文段的首部長度,以 4byte為單位</p><p> 標志位:用于區(qū)分不同類型的tcp報文</p><p>
14、窗口:該字段在傳輸過程中,動態(tài)變化,表明允許對方發(fā)送的數據量</p><p> 校驗和:檢驗和字段檢查的范圍包括偽首部,tcp首部和數據部分</p><p> 緊急指針:只在url=1時才使用,指明該報文中有緊急數據的字節(jié)數,偽首部中的協(xié)議字段值一般為6</p><p> 選項:長度可變0—40byte</p><p> (2)確定開
15、發(fā)工具。確定使用VC++和Winpcap開發(fā)工具來實現共享域中數據包的抓取。</p><p> (3)上網查閱關于Winpcap的使用方法和抓取數據包所要用的各種函數。</p><p> ?。?)用VC++編程來具體實現數據包的抓取。</p><p> ?。?)首先獲先利用Winpcap中的pcap_findalldevs函數來獲得網卡列表,并將其打印出來。<
16、;/p><p> ?。?)利用Winpcap中的pcap_open_live函數來打開選擇的網卡。</p><p> ?。?)利用Winpcap中的pcap_compile來起到過濾作用,只接受TCP和IPV4的內容</p><p> ?。?)使用回調函數pcap_loop(adhandle, 10, packet_handler, NULL)來捕獲數據包,并打印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 關鍵程序代碼</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、 /* 獲得網卡的列表 */</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> /* 打印網卡信息 */</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); //輸入要選擇打開的網卡號</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> /* 找到要選擇的網卡結構 */</p><p> for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);</p><
28、p> /* 打開選擇的網卡 */</p><p> if ( (adhandle= pcap_open_live(d->name, // 設備名稱</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、沒有地址,那么我們假設這個接口在C類網絡中 */ </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> /* 釋放設備列表 */ </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> /* 釋放設備列表 */ </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 調試過程</b></p><p> 圖4 運行結果示例1</p><p> 圖5 運行結果示例2</p><p> 圖6 運行結果示例3</p><p> 圖7 運行結果示例4</p><p> 圖8 運行結果示例5</p
43、><p> 圖9 運行結果示例6</p><p> 2.7 程序運行測試報告</p><p> 圖10 運行結果測試1</p><p> 圖11 運行結果測試2</p><p> 3 遇到的問題和解決方法</p><p> 在本次的課程設計中,我選擇了 題目A:編寫一個TCP報文分析小工
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 編寫一個計算器程序課程設計報告-范例
- 私教小工具培訓
- java課程設計--編寫一個記事本程序
- java課程設計-編寫一個記事本程序
- 網絡課程設計報告----基于tcp的點對點即時通信工具
- 計算機控制小工具拋光技術.pdf
- 課程設計--基于tcp的計算機通信工具編程實現
- gsm及cdma頻率頻點換算小工具
- javascript版base64編解碼小工具
- 課程設計--基于tcp的計算機通信工具編程實現
- 【小工具大幫手】課程實錄ppt
- 孤東油田新型機采配套小工具探討
- 廚房小工具產品開發(fā)之系列化設計研究.pdf
- [教育]張京生——自制小工具,維修克難題
- 設計一個完整的數據通信系統(tǒng)--數據通信課程設計
- 微機原理與接口課程設計--用匯編語言編寫一個時鐘程序
- java課程設計報告---設計一個多功能計算器
- java課程設計---設計一個記事本
- 課程設計--設計一個矩陣運算器
- 課程設計用c++設計一個排課程序
評論
0/150
提交評論