2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論