通信課程設(shè)計報告---編寫一個tcp報文分析小工具_(dá)第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論