計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_監(jiān)控IP包流量_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_監(jiān)控IP包流量_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_監(jiān)控IP包流量_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)_監(jiān)控IP包流量_第4頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.目錄33 3.4:.5: .6 .6 : .6專業(yè) .專注.一、課程設(shè)計(jì)目的隨著 Internet技術(shù)的發(fā)展 ,基于 IP 協(xié)議的應(yīng)用成為網(wǎng)絡(luò)技術(shù)研究與軟件開發(fā)的一個重要基礎(chǔ) ,因此學(xué)習(xí)網(wǎng)絡(luò)層以基本概念,了解 IP 協(xié)議的基本內(nèi)容 ,對于掌握 TCP/IP 協(xié)議的主要內(nèi)容和學(xué)習(xí)網(wǎng)絡(luò)課程是十分重要的,通過本次課程設(shè)計(jì),有助于熟悉 IP 包格式和加深對IP 協(xié)議的理解 。二、課程設(shè)計(jì)要求編制程序 ,監(jiān)控網(wǎng)絡(luò) ,捕獲一段時(shí)間內(nèi)網(wǎng)絡(luò)上的IP 數(shù)據(jù)包,按 IP 數(shù)據(jù)包的源地址統(tǒng)計(jì)出該源地址在該時(shí)間段內(nèi)發(fā)出的IP 包的個數(shù) ,將其寫入日志文件中或用圖形表示出來 (建議用圖形表示出統(tǒng)計(jì)結(jié)果)。程序的具體要

2、求如下 :用命令行運(yùn)行 : IPStatistic time logfile其中, IPStatistic 是程序名 ;time 是設(shè)定的統(tǒng)計(jì)時(shí)間間隔 (單位為分鐘 ,比如,2 表示 2 分鐘); logfile 表示統(tǒng)計(jì)結(jié)果寫入的日志文件名(若用圖形表示統(tǒng)計(jì)結(jié)果則可以不選這個參數(shù))。相關(guān)知識 :IP 是 ICP/IP 協(xié)議體系中的網(wǎng)絡(luò)層協(xié)議,TCP、 UDP、ICMP 和 IGMP 等其他協(xié)議都是以 IP 協(xié)議為基礎(chǔ)的 。IP 的特點(diǎn)如下 :( 1) IP 協(xié)議是一種不可靠 、無連接的數(shù)據(jù)報(bào)傳送協(xié)議 。( 2) IP 協(xié)議是點(diǎn)對點(diǎn)的網(wǎng)絡(luò)層通信協(xié)議 。專業(yè) .專注.( 3) IP 協(xié)議向通信層

3、隱藏了物理網(wǎng)絡(luò)的差異。三、課程設(shè)計(jì)主要思路分析1課程設(shè)計(jì)中的重點(diǎn)及難點(diǎn)( 1)程序中會用到 Winpcap, Winpcap是 Windows packet capture的縮寫,這是 UNIX 下的 lipbcap 移植到 Windows 下的產(chǎn)物 ,是 Win32 環(huán)境下數(shù)據(jù)包捕獲的開放代碼函數(shù)庫。 Winpcap由內(nèi)核級的數(shù)據(jù)包過濾器,底層動態(tài)鏈接庫( packet.dll )和一個高層的獨(dú)立于系統(tǒng)的庫 (wpcap.dll )組成 。Winpcap 提供以下功能 :1) 捕獲原始數(shù)據(jù)報(bào) ,包括共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/ 接收的數(shù)據(jù)報(bào)以及各主機(jī)之間交換的數(shù)據(jù)報(bào) 。2) 在數(shù)據(jù)報(bào)發(fā)往應(yīng)用程序之

4、前,按照自定義的規(guī)則過濾某些特殊的數(shù)據(jù)報(bào)。3) 將用戶構(gòu)造的數(shù)據(jù)報(bào)發(fā)送到網(wǎng)絡(luò)中。4) 統(tǒng)計(jì)網(wǎng)絡(luò)的流量 。Winpcap 的主要功能在于獨(dú)立于主機(jī)協(xié)議(如 TCP/IP)發(fā)送和接收原始數(shù)據(jù)報(bào) 。也就是說 ,Winpcap不能阻塞 、過濾或控制其他應(yīng)用程序數(shù)據(jù)報(bào)的收發(fā),它只是監(jiān)聽共享網(wǎng)絡(luò)上傳送的數(shù)據(jù)報(bào)。因此 ,它不能用于 QoS 調(diào)度程序或個人防火墻?;?Winpcap 的應(yīng)用程序一般按照下面幾個步驟編寫:1) 獲取網(wǎng)絡(luò)設(shè)備列表 。2) 選擇網(wǎng)卡并打開 。3) 當(dāng)捕獲數(shù)據(jù)包時(shí) ,可能需要設(shè)置過濾器 。4) 捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。專業(yè) .專注.Packet.dll 相關(guān)數(shù)據(jù)結(jié)構(gòu)typedef

5、struct_ADAPTERADAPTER/ 描述一個網(wǎng)絡(luò)適配器typedef struct_PACKET PACKET 具/ 描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu)typedef struct NetType NetType/ 描述網(wǎng)絡(luò)類型的數(shù)據(jù)結(jié)構(gòu)typedef struct npf_if_addr npf_if_addr /描述一個網(wǎng)絡(luò)適配器的IP 地址struct bpf_hdr/ 數(shù)據(jù)報(bào)頭部struct bpf_stat/ 當(dāng)前捕獲數(shù)據(jù)報(bào)( 2)列出網(wǎng)卡列表 ,讓用戶選擇可用的網(wǎng)卡 。( 3)注意過濾器的使用 ,只需捕獲 IP 所,別的包都需過濾掉 。2參考算法( 1)取得當(dāng)前網(wǎng)絡(luò)設(shè)備列表 (在標(biāo)

6、準(zhǔn)輸出上顯示 ,以讓用戶進(jìn)行選擇 )。( 2)將用戶選擇的 Ethernet 卡以混雜模式打開 ,以接收到所有的數(shù)據(jù)包 。( 3)設(shè)置過濾器 ,此處的過濾器 “IP”。( 4)捕獲 IP 包并按包的源地址進(jìn)行統(tǒng)計(jì) (用鏈表結(jié)構(gòu)進(jìn)行實(shí)現(xiàn) )。程序流程如圖 1-1 所示:四、設(shè)計(jì)流程圖 。專業(yè) .專注.開始獲取網(wǎng)卡列表選取 Ethermet 網(wǎng)卡打開網(wǎng)卡(混雜模式)編譯設(shè)置過濾器捕獲 IP包將IP 包源地址加入鏈表超時(shí)否?輸出鏈表內(nèi)容結(jié)束圖 1-1 程序流程圖五、運(yùn)行結(jié)果 :安裝好 WinPcap 軟件,在 VC+ 界面上點(diǎn)擊工具 -> 選項(xiàng) -> 目錄 。添加 Include專業(yè) .

7、專注.文件夾下的所有文件和Lib 下的所有內(nèi)容 ,調(diào)試完程序無誤后 ,點(diǎn)擊開始 > 運(yùn)行 “cmd ”進(jìn)入目標(biāo)文件夾 Debug 下運(yùn)行 IPI.EXE文件并加入?yún)?shù) 2 bl.txt 。 此時(shí)程序會檢測電腦系統(tǒng)中的網(wǎng)卡數(shù),然后選擇程序運(yùn)行時(shí)的網(wǎng)絡(luò)接口,耐心等待兩分鐘后就會得到程序的運(yùn)行結(jié)果.圖 1-2 系統(tǒng)中網(wǎng)絡(luò)接口數(shù)圖 1-3 選擇第一個網(wǎng)絡(luò)接口圖 1-4 1 分鐘之后捕獲的ip 地址和數(shù)據(jù)包專業(yè) .專注.六、總結(jié):通過本次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì),我更加充分的理解了課本上的知識,并能夠加以擴(kuò)展,從而應(yīng)用于實(shí)踐當(dāng)中,這幾天的課程設(shè)計(jì)令我受益匪淺,我意識到我們所學(xué)的東西將來都是要付諸實(shí)踐的,

8、所以一切要從實(shí)際情況出發(fā),理論聯(lián)系實(shí)際,這樣才能真正發(fā)揮我們所具備的能力 。這次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)歷時(shí)二個星期,在整整十多天的日子里,可以說得是苦多于甜 ,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。以前對于編程工具的使用還處于一知半解的狀態(tài)上 ,但是經(jīng)過一段上機(jī)的實(shí)踐,對于怎么去排錯 、查錯 ,怎么去看每一步的運(yùn)行結(jié)果。 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的 ,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在設(shè)計(jì)的

9、過程中遇到問題,可以說得是困難重重 ,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固 。 這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解 。 同時(shí), 在老師的身上我學(xué)得到很多實(shí)用的知識,在次我表示感謝 !同時(shí) ,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!參考文獻(xiàn)1 吳功宜胡曉英 .計(jì)算機(jī)網(wǎng)課程設(shè)計(jì)北京 :機(jī)械工業(yè)出版社 ,2007.12.專業(yè) .專注.2 張蕘學(xué) 郭國強(qiáng) .計(jì)算機(jī)網(wǎng)絡(luò)與 Internet 教程 (第二版 ) 北京 :清華大學(xué)出版社2

10、006.11.3 王春曉 趙艷標(biāo) .計(jì)算機(jī)網(wǎng)絡(luò)教程 北京 :機(jī)械工業(yè)出版社 ,2005.08.4 張仁 何云 .計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)指導(dǎo) 北京 :清華大學(xué)出版社 2006.05.源代碼 :/ 主程序#include <iostream.h>#include <iomanip.h>#include <fstream.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include "pcap.h"/#include "IPNodeL

11、ist.h"#pragma comment(lib,"Wpcap.lib")#pragma comment(lib,"Ws2_32.lib")/IP 包的頭部包括struct ip_headerunsigned char ver_ihl;/ 版本號 (4 位)+ 頭部長度 (4 位 )unsigned char tos;/ 服務(wù)類型unsigned short tlen;/ 總長度unsigned short identification;/ 標(biāo)識專業(yè) .專注.unsigned short flags_fo;/ 標(biāo)志 + 片偏移unsigned

12、 char tll;/ 生存時(shí)間unsigned char proto;/ 協(xié)議unsigned short crc;/ 校驗(yàn)碼DWORD saddr;/ 源地址DWORD daddr;/ 目的地址unsigned int op_pad;/ 選項(xiàng)+填充;class IPNodeprivate:long m_lIPAddress;/IP 地址long m_lCount;/ 發(fā)送數(shù)據(jù)包數(shù)public:IPNode *pNext;/ 指向下一個 IP 結(jié)點(diǎn)/ 構(gòu)造函數(shù)IPNode(long sourceIP)m_lIPAddress=sourceIP;m_lCount=1;/ 初始化數(shù)據(jù)包個數(shù)為 1

13、/ 數(shù)據(jù)包個數(shù)加 1專業(yè) .專注.void addCount()m_lCount+;/ 返回?cái)?shù)據(jù)包個數(shù)long getCount()return m_lCount;/ 返回 IP 地址long getIPAddress()return m_lIPAddress;/ 結(jié)點(diǎn)鏈表class NodeListIPNode *pHead;IPNode *pTail;public:NodeList()專業(yè) .專注.pHead=pTail=NULL;NodeList()if(pHead!=NULL)IPNode *pTemp=pHead;pHead=pHead->pNext;delete pTemp;

14、/IP 結(jié)點(diǎn)加入鏈表void addNode(long sourceIP)if(pHead=NULL)/ 當(dāng)鏈表為空時(shí)pTail=new IPNode(sourceIP);pHead=pTail;pTail->pNext=NULL;else/ 不為空時(shí)專業(yè) .專注.for(IPNode *pTemp=pHead;pTemp;pTemp=pTemp->pNext)/ 如果鏈表中存在此 IP,發(fā)送數(shù)據(jù)包個數(shù)加 1 if(pTemp->getIPAddress()=sourceIP)pTemp->addCount();break;/ 如果鏈表中沒有此 IP,則加入鏈表if(p

15、Temp=NULL)pTail->pNext=new IPNode(sourceIP);pTail=pTail->pNext;pTail->pNext=NULL;/ 輸出 IP 結(jié)點(diǎn) ,即 IP 地址和其他送的 IP 包的個數(shù)ostream& print(ostream & out)for(IPNode *pTemp=pHead;pTemp;pTemp=pTemp->pNext)專業(yè) .專注.long lTemp=pTemp->getIPAddress();out<<inet_ntoa(*(in_addr*)&(lTemp)&l

16、t;<'t'out<<pTemp->getCount()<<endl;return out;void main(int argc,char *argv)if (argc!=3)/ 判斷是否正確cout<<"Usage:IPStatistic time logfile"<<endl;cout<<"Press any key to continue."<<endl;_getch();return;double min=atof(argv1);pcap_if_t

17、 *alldevs;/ 網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)pcap_if_t *d,*head=NULL;pcap_t *fp;/ 網(wǎng)卡描述專業(yè) .專注.char errbufPCAP_ERRBUF_SIZE;/ 錯誤信息unsigned int netmask;/ 子網(wǎng)掩碼char packet_filter="ip"/ 過濾 ,選擇 IP 協(xié)議struct bpf_program fcode;struct pcap_pkthdr *header;const unsigned char *pkt_data;/ 獲取網(wǎng)絡(luò)設(shè)備列表if(pcap_findalldevs(&alldevs,e

18、rrbuf) = -1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;int i=1;/ 網(wǎng)卡數(shù)if(i=0)/ 無設(shè)備cout<<"nNo interfaces found! Make sure Winpacp is installed.n"return;if(i>=1)int j=0;for(d=alldevs;d;d=d->next) /列出網(wǎng)卡列表 ,讓用戶進(jìn)行選擇專業(yè) .專注.cout<<+j<<":"

19、;<<d->name;if(d->description)cout<<" "<<d->description<<endl;cout<<"nEnter the interface number(1-"<<j<<"):"int k;cin>>k;if(k<1|k>j)cout<<"out of range"<<endl;return;for(d=alldevs,i=1;i

20、<k;d=d->next,i+);/ 找到選擇的網(wǎng)卡head=d;/ 以混雜模式方式打開網(wǎng)卡if(fp=pcap_open_live(head->name,1000,1,1000,errbuf)=NULL)cout<<"nUnable to open the adapter."<<endl;pcap_freealldevs(alldevs);return;專業(yè) .專注./ 獲取子網(wǎng)掩碼if(head->addresses!=NULL)netmask=(structelse/ 沒有地址則假設(shè)為 C 類地址netmask=0xFF

21、FFFF00;/ 編譯過濾器if(pcap_compile(fp,&fcode,packet_filter,1,netmask)<0)cout<<"nUnable to compile the packet filter.Check the syntax.n"pcap_freealldevs(alldevs);return;/ 設(shè)置濾波器if(pcap_setfilter(fp,&fcode)<0)cout<<"nError setting the filter.n"pcap_freealldevs(alldevs);return;專業(yè) .專注./ 顯示提示信息及每項(xiàng)的含義cout<<"ttlistening on"<<head->description<<"."<<endl<<endl;ofstream fout(argv2,ios:app);/ 日志記錄文件fout<<"tIP Statistic:("<<min<<"minutes)"<<endl;time_t tmp=time(NULL

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論