




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網(wǎng)絡課程設計題 目網(wǎng)絡嗅探器的設計與實現(xiàn)系(部)姓 名 學 號 指導教師2015年7月18日計算機網(wǎng)絡課程設計任務書一、設計題目、內(nèi)容及要求題目:網(wǎng)絡嗅探器的設計與實現(xiàn)內(nèi)容:本設計是關于網(wǎng)絡嗅探器的設計與實現(xiàn),功能包括實現(xiàn)網(wǎng)絡層抓包,對獲得包的源和目的地址、端口、協(xié)議等進行分析和實現(xiàn)簡單的包嗅探器功能。要求:1.實現(xiàn)網(wǎng)絡嗅探器的界面2 .實現(xiàn)抓取數(shù)據(jù)包的功能。3 .實現(xiàn)清空列表功能二、要求的設計成果(課程設計說明書、設計實物、圖紙等)1 .課程設計報告2 .實現(xiàn)網(wǎng)絡嗅探器的程序代碼三、進程安排1、 設計工作4學時2、 實現(xiàn)與調(diào)試20學時3、 課程設1f報告6學時四、主要參考資料4、 王群
2、計算機網(wǎng)絡安全技術5、 吳功宜,董大凡王理等.計算機網(wǎng)絡高級軟件編程技術【M.北京:清華大學出版社,20083謝小特,王勇軍.基于winPcap 的捕包程序設計【J.軟件/I刊,2007 (11 ):71-724胡曉元,史浩山.winpcap包截獲系統(tǒng)的分析及其應用【J】.計算機工程,2005 (1 ): 96-975趙輝,葉子青.VisualC+ 系統(tǒng)開發(fā)實例精粹【M,北京:人民郵電出版 社,2005網(wǎng)絡嗅探器的設計與實現(xiàn)摘要:網(wǎng)絡嗅探器是對網(wǎng)絡中的數(shù)據(jù)幀進行捕獲的一種被動監(jiān)聽手段,是一種常用的收集有用數(shù)據(jù)的方法。本設計是關于網(wǎng)絡嗅探器的設計與實現(xiàn),其功能包括實現(xiàn)網(wǎng)絡層抓包,對獲得包的源和目
3、的地址、端口、協(xié)議等進行分析和實現(xiàn)簡單的包嗅探器功能。關鍵字:網(wǎng)絡嗅探器;數(shù)據(jù)包捕獲;套接字引言由于網(wǎng)絡技術的發(fā)展,計算機網(wǎng)絡的應用越來越廣泛,其作用也越來越重要。計算機網(wǎng)絡安全問題更加嚴重,網(wǎng)絡破壞所造成的損失越來越大。但是由于計算機系統(tǒng)中軟硬件的脆弱性和計算機網(wǎng)絡的脆弱性以及地理分布的位置、自然環(huán)境、自然破壞以及人為因素的影響,不僅增加了信息存儲、處理的風險,也給信息傳送帶來了新的問題。嗅探器是一種常用的收集有用數(shù)據(jù)的方法,可以作為網(wǎng)絡數(shù)據(jù)包的設備。嗅探器是通過對網(wǎng)卡的編程來實現(xiàn)網(wǎng)絡通訊的,對網(wǎng)卡的編程是使用通常的套接字(socket )方式來進行。通常的套接字程序只能響應與自己硬件地址相
4、匹配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀比如已到達網(wǎng)絡接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡接口在驗證投遞地址并非自身地址之后將不引起響應,也就是說應用程序無法收取到達的數(shù)據(jù)包。 而網(wǎng)絡嗅探器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的也可以是發(fā)往別處的。1 基本概念1.1 嗅探器每一個在局域網(wǎng)(LAN )上的工作站都有其硬件地址,這些地址唯一地表示了網(wǎng)絡上的機器。當用戶發(fā)送一個數(shù)據(jù)包時,這些數(shù)據(jù)包就會發(fā)送到LAN上所有可用的機器。在一般情況下,網(wǎng)絡上所有的機器都可以“聽”到通過的流量,但對不屬于自己的數(shù)據(jù)包則不予響應。嗅探器工作在網(wǎng)絡的底層,在網(wǎng)絡上監(jiān)聽
5、數(shù)據(jù)包來獲取敏感信息。從原理上來說,在一個實際的系統(tǒng)中,數(shù)據(jù)的收發(fā)是由網(wǎng)卡來完成的,網(wǎng)卡接收到傳輸來的數(shù)據(jù),其內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址,根據(jù)計算機上的網(wǎng)卡驅(qū)動程序設置的接收模式判斷該不該接收,認為該接收就接收后產(chǎn)生中斷信號通知CPU ,認為不該接收就丟掉不管,所以不該接收的數(shù)據(jù)網(wǎng)卡就截斷了,計算機根本就不知道。對于網(wǎng)卡來說一般有四種接收模式:a)廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡中的廣播信息。b)組播方式:設置在該模式下的網(wǎng)卡能夠接收組播數(shù)據(jù)。c)直接方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù)。d)混雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過它的數(shù)據(jù),而不管該數(shù)據(jù)是否是傳給
6、它的。嗅探程序是一種利用以太網(wǎng)的特性把網(wǎng)絡適配卡(NIC , 一般為以太網(wǎng)卡)置為混雜模式狀態(tài)的工具,一旦網(wǎng)卡設置為這種模式,它就能接收傳輸在網(wǎng)絡上的每一個信息包,而不管該數(shù)據(jù)是否傳給它的。1.2 相關協(xié)議1.2.1 IP 協(xié)議網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡層中最重要的協(xié)議。 IP層接收由更低層(網(wǎng)絡接口層,例如以太網(wǎng)設備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相反,IP層也把從 TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)
7、和接收它的主機的地址(目 的地址)。1.2.2 TCP 協(xié)議如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向上傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應用程序,例如 Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅(qū)動程序和物理介質(zhì),最后到接收方。1.2.3 UDP 協(xié)議UDP與TCP位于同一層,但對于數(shù)據(jù)包的順序錯誤或重發(fā)。因此,UDP不被應用于那些使用虛電路的面向連接的服務,UDP
8、主要用于那些面向查詢 -應答的服務,例如NFS。相對于 FTP或Telnet ,這些服務需要交換的信息量較小。使用 UDP的服務包才NTP (網(wǎng)落時間協(xié)議)和 DNS (DNS也使用 TCP)。 欺騙UDP包比欺騙 TCP包更容易,因為 UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統(tǒng)間沒有虛電路),也就是說,與 UDP相關的服務面臨著更大的危險。1.3 數(shù)據(jù)包“包”(Packet)是TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單位, 一般也稱“數(shù)據(jù)包” 。TCP/IP 協(xié)議是工作在 OSI模型第三層(網(wǎng)絡層)、第四層(傳輸層)上的,而幀是工作在第二層 (數(shù) 據(jù)鏈路層)。上一層的內(nèi)容由下一層的內(nèi)
9、容來傳輸,所以在局域網(wǎng)中,“包”是包含在“幀”里的。數(shù)據(jù)包的結構非常復雜,主要由“目的 IP地址”、“源IP地址”、“凈載數(shù)據(jù)”等部分構成。正是因為數(shù)據(jù)包具有這樣的結構,安裝了TCP/IP協(xié)議的計算機之間才能相互通信。我們在使用基于TCP/IP協(xié)議的網(wǎng)絡時,網(wǎng)絡中其實傳遞的就是數(shù)據(jù)包。比如說當你上網(wǎng)時打開某個網(wǎng)頁,這個簡單的動作,就是你先發(fā)送數(shù)據(jù)包給那個 網(wǎng)站,它接收到了之后,根據(jù)你發(fā)送的數(shù)據(jù)包的IP地址,返回給你網(wǎng)頁的數(shù)據(jù)包,也就是說,網(wǎng)頁的瀏覽,實際上就是數(shù)據(jù)包的交換。2網(wǎng)絡嗅探器的作用嗅探器是網(wǎng)絡的抓包工具,可以對網(wǎng)絡中大量數(shù)據(jù)抓取,從而方便使用者對網(wǎng)絡中用戶的一些信息進行分析,所以,通
10、常被黑客運用于網(wǎng)絡攻擊。我們?nèi)绻材苷莆站W(wǎng)絡 嗅探器的原理和設計,可以將它運用與網(wǎng)絡故障檢測、網(wǎng)絡狀況的監(jiān)視,還可以加強企 業(yè)信息安全防護。3網(wǎng)絡嗅探器原理嗅探器作為一種網(wǎng)絡通訊程序,也是通過對網(wǎng)卡的編程來實現(xiàn)網(wǎng)絡通訊的,對網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進行。但是,通常的套接字程序只能響應與自己硬件地址相匹配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀比如已到達網(wǎng)絡接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡接口在驗證投遞地址并非自身地址之后將不引起響應,也就是說應用程序無法收取到達的數(shù)據(jù)包。而網(wǎng)絡嗅探器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的
11、也可以是發(fā)往別處的。顯然,要達到此目的就不能再讓網(wǎng)卡按通常的正常模式工作,而必須將其設置為混 雜模式。具體到編程實現(xiàn)上,這種對網(wǎng)卡混雜模式的設置是通過原始套接字(raw socket) 來實現(xiàn)的,這也有別于通常經(jīng)常使用的數(shù)據(jù)流套接字和數(shù)據(jù)報套接字。在創(chuàng)建了原始套接 字后,需要通過setsockopt() 函數(shù)來設置IP頭操作選項,然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過 ioctlsocket()來進行設置,而且還可以指定是否親自處理IP頭。至此,實際就可以開始對網(wǎng)絡數(shù)據(jù)包進行嗅探了,對數(shù)據(jù)包的獲取仍象流式套接字或數(shù)據(jù)報套接字那樣通過r
12、ecv()函數(shù)來完成。但是與其他兩種套接字不同的是,原始套接字此時捕獲到的數(shù)據(jù)包 并不僅僅是單純的數(shù)據(jù)信息,而是包含有IP頭、TCP頭等信息頭的最原始的數(shù)據(jù)信息,這些信息保留了它在網(wǎng)絡傳輸時的原貌。通過對這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫接嘘P網(wǎng)絡的一些信息。由于這些數(shù)據(jù)經(jīng)過了網(wǎng)絡層和傳輸層的打包,因此需要根據(jù)其附加的幀頭對數(shù)據(jù)包進行分析。下面給出數(shù)據(jù)包的總體結構:3.1 UDP數(shù)據(jù)段頭數(shù)據(jù)在從應用層到達傳車層時,將添加 TCP數(shù)據(jù)段頭,或是 UDP數(shù)據(jù)段頭。其 中UDP數(shù)據(jù)段頭比較簡單,由 source port( 源端口號)、destination port( 目的端口 號)、udp l
13、ength(udp 長度)、udp checksum(udp 校驗和)組成。UDP 報頭結構體 為:typedef struct udphdr unsigned short sport;/*source port(源端口號)*/unsigned short dport;/*destination port(目的端口號)*/unsigned short len;/*udp length(udp長度)*/unsigned short cksum;/*udp checksum(udp校驗和)*/UDP_HDR;3.2 TCP數(shù)據(jù)段頭TCP數(shù)據(jù)頭則比較復雜,以 20個固定字節(jié)開始,在固定頭后面還可以有
14、一些長度不固定的可選項,由 source port(源端口號)、destination port(目的端口號)、順序 號、確認號、 TCP頭長、校驗和 緊急指針、可選項 (0或更多的32位字)、數(shù)據(jù)(可選 項)。組成。TCP報頭結構體為:typedef struct tcpheader unsigned short int sport;/*source port (源端口號)*/unsigned short int dport;/*destination port( 目的端口號)*/unsigned int th_seq;unsigned int th_ack;unsigned char th
15、_x:4;unsigned char th_off:4;unsigned char Flags;unsigned short int th_win;unsigned short int th_sum;/*sequence number( 包的序列號)*/*acknowledgement number(確認應答號)*/*unused(未使用)*/*data offset(數(shù)據(jù)偏移量)*/*標志全*/*windows(窗 口 )*/*checksum(校驗和)*/unsigned short int th_urp;/*urgent pointer(緊急指針)*/TCP_HDR;3.3 IP數(shù)據(jù)段頭
16、在網(wǎng)絡層,還要給 TCP數(shù)據(jù)包添加一個IP數(shù)據(jù)段頭以組成IP數(shù)據(jù)報。IP數(shù)據(jù)頭以大端點機次序傳送,從左到右,版本字段的高位字節(jié)先傳輸(SPARC 是大端點 機;Pentium 是小端點機)。如果是小端點機,就要在發(fā)送和接收時先行轉(zhuǎn)換然后才能進 行傳輸。IP數(shù)據(jù)段頭格由版本IHL服務類型 總長、標志、 分段偏移、頭校驗和、源地址、目的地、選項(0或更多)組成。IP數(shù)據(jù)報頭的結構體為:struct ipheader unsigned char ip_hl:4;unsigned char ip_v:4;unsigned char ip_tos;/*header length(報頭長度)*/*vers
17、ion(版本)*/*type os service服務類型 */unsigned short int ip_len;/*total length ( 總長度)*/unsigned short int ip_id;"identification ( 標識符)*/unsigned short int ip_off;/*fragment offset field(段移位域 )*/unsigned char ip_ttl;/*time to live ( 生存時間)*/unsigned char ip_p;/*protocol( 協(xié)議)*/unsigned short int ip_sum;
18、/*checksum( 校驗和)*/unsigned int ip_src;/*source address( 源地址)*/unsigned int ip_dst;/*destination address( 目的地址)*/4網(wǎng)絡嗅探器的設計在以太網(wǎng)中,信息是以明文的形式在網(wǎng)絡上傳輸,當將網(wǎng)絡適配器設置為混雜模式時,由于采用以太網(wǎng)廣播信道爭用的方式,使得監(jiān)聽系統(tǒng)與正常通信的網(wǎng)絡能夠并聯(lián)連接,并可捕獲任何一個在同一沖突域上傳輸?shù)臄?shù)據(jù)包。IEEE802. 3標準的以太網(wǎng)采用的是持續(xù)CSMA 的方式,正是由于以太網(wǎng)采用這種廣播信道爭用的方式,使得各個站點可以獲得其他站點發(fā)送的數(shù)據(jù)。運用這一原理使信息
19、捕獲系統(tǒng)能夠攔截我所要的信息,這是捕獲數(shù)據(jù)包的物理基礎。首先,抓包系統(tǒng)必須繞過操作系統(tǒng)的協(xié)議棧來訪問在網(wǎng)絡上傳輸?shù)脑紨?shù)據(jù)包,這就要求一部分運行在操作系統(tǒng)核心內(nèi)部,直接與網(wǎng)絡接口驅(qū)動交互。這個部分是系統(tǒng)依賴的,在W inpcap的解決方案里它被認為是一個設備驅(qū)動稱作 NPF ( NetgroupPacket F ilter)。 W inpcap提供了兩個不同的庫:Packet. dll和W pcap. dll o Wpcap. dll提供了更加友好、功能更加強大的函數(shù)調(diào)用。W inPcap 的優(yōu)勢在于提供了一套標準的抓包接口,與libpcap 兼容,可使得原來許多UN IX平臺下的網(wǎng)絡分析工具
20、快速移植過來,便于開發(fā)各種網(wǎng)絡分析工具,充分考慮了各種性能和效率的優(yōu)化,包括對于 NPF內(nèi)核層次上的過濾器支持,支持內(nèi)核態(tài)的統(tǒng)計模式,提供了發(fā)送數(shù)據(jù)包的能力。前者提供了一個底層AP I,伴隨著一個獨立于M icrosoft 操作系統(tǒng)的編程接口 ,這些AP I可以直接用來訪問驅(qū)動的函數(shù);后者導出了一組更強大的與libpcap一致的高層抓包函數(shù)庫(capture prmi itives) 。這些函數(shù)使得數(shù)據(jù)包的捕獲以一種與網(wǎng)絡硬件和操作系統(tǒng)無關的方式進行。網(wǎng)絡嗅探器工作在網(wǎng)絡環(huán)境的底層 ,攔截所有正在網(wǎng)絡上傳送的數(shù)據(jù),并且通過相應的解析處理,可以實時分析這些數(shù)據(jù)的內(nèi)容,進而分析所處的網(wǎng)絡狀態(tài)和整體
21、拓撲布局。含了相應設備的名 稱和描述。取得網(wǎng)卡列表后就在屏幕上顯示出來,如果網(wǎng)卡沒有被發(fā)現(xiàn)就顯示有關錯誤pcap _ findalldevs ()同其他的libpcap 函數(shù)一樣有一個errbuf 參數(shù),當有異常情況發(fā)生時,這個參數(shù)會被pcap填充為某個特定錯誤字串。程序功能示意如下:獲得網(wǎng)卡的信息后就可以按數(shù)據(jù)捕獲的要求打開網(wǎng)卡。但是大部分的包捕獲程序都將混雜模式設為默認。數(shù)據(jù)包的過濾通過設置數(shù)據(jù)流過濾規(guī)則來實現(xiàn),數(shù)據(jù)包過濾處理時嗅探技術中的難點和重點,WinPcap提供了最強大的數(shù)據(jù)流過濾引擎。它才用了一種高效的方法來捕獲網(wǎng)絡數(shù)據(jù)流的某些數(shù)據(jù)且常常和系統(tǒng)的捕獲機制相集成。過濾數(shù)據(jù)的函數(shù)定U
22、DP的起始位置,就可以解析出原端口和目的端口。數(shù)據(jù)包捕獲流程圖:圖4.1數(shù)據(jù)包捕獲流程圖4.1 嗅探器設計需要結構體嗅探器需要的結構體是由IP數(shù)據(jù)報結卞體、TCP報頭結構體、UDP報頭結構體組成。每個結構體如何定義已在網(wǎng)絡嗅探器的原理中具體講過。4.2 過濾規(guī)則的主要代碼if (sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)=SOCKET_ERROR)exit(1);gethostname(name, MAX_HOSTNAME_LAN);pHostent = gethostbyname(name);sa.sin_family = AF_INET;sa.
23、sin_port = htons(6000);memcpy(&sa.sin_addr.S_un.S_addr,pHostent->h_addr_list0,/*bind()設定自己主機的IPpHostent->h_length);bind(sock, (SOCKADDR *)&sa, sizeof(sa);地址和端口號*/if (WSAGetLastError()=10013)exit(1);WSAIoctl(sock, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &dwBytesRet, NULL,
24、NULL);pIpheader = (struct ipheader *)RecvBuf;pTcpheader = (struct tcpheader *)(RecvBuf+ sizeof(struct ipheader );pUdpheader = (struct udphdr *) (RecvBuf+ sizeof(struct ipheader );while (1)memset(RecvBuf, 0, sizeof(RecvBuf);recv(sock, RecvBuf, sizeof(RecvBuf), 0);saSource.sin_addr.s_addr = pIpheader-
25、>ip_src;strncpy(szSourceIP , inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN);saDest.sin_addr.s_addr = pIpheader->ip_dst;strncpy(szDestIP , inet_ntoa(saDest.sin_addr), MAX_ADDR_LEN);lentcp =(ntohs(pIpheader->ip_len)-(sizeof(structipheader)+sizeof(structipheader)+sizeof(structtcpheader);lenudp =(
26、ntohs(pIpheader->ip_len)-(sizeof(structudphdr);4.3 循環(huán)抓包4.3.1 TCP 包if(pIpheader->ip_p)=IPPROTO_TCP&&lentcp!=0)printf("*n");pCount+;datatcp=(unsigned char *) RecvBuf+sizeof(struct ipheader)+sizeof(struct tcpheader); printf("-TCP-n");printf("n 目的 IP 地址:sn",sz
27、DestIP);printf("n 目的端: %in",ntohs(pT cpheader->dport);printf("datatcp address->%xn",datatcp);printf("size of ipheader->%in",sizeof(struct ipheader);printf("size of tcpheader->%in",sizeof(struct tcpheader);printf("size of the hole packet->%i
28、n",ntohs(pIpheader->ip_len);printf("nchar Packet%i %i="",pCount,lentcp-1);for (i=0;i<lentcp;i+)printf("x%.2x",*(datatcp+i);if (i%10=0)printf(""n"");printf(""nnn");for (i=0;i<lentcp;i+)if( *(datatcp+i)<=127&&*(datatc
29、p+i)>=20)printf("%c",*(datatcp+i);elseprintf(".");printf("nn*n");運行后的結果:IPUR INT DE» SI« PRE COM N口U OTC MOI DSP COR' - . - ac>502 B磋d餐.body b<fcoloruwJiitc <CGnt Gr>,Chl >502 Dad 5七/已 vCZh1 ><-<centRi*>. .<hvXcfinter>ng
30、inx/l .4.1<Zcente>>>. H<ZTindy|>, ./HtinlA.0L . .* X NX yt * M 姓-X * X * M XM R = SM JH 奸 MKM * M A X =陛 X * M *TCP一目的IP地址;211,137.123.17目的端口 i NM Qdl9Lcp address >11fc68 eWk號 aFs isc of tcplic*dcir->20|s i of tlw: Iwile pankftt->52chat- Packctl61 Ill 1 -“、x0e”H '"
31、;Xxi14KxHh Xjcti4 XWl XmH3! 3cM1! XxM2 3fkl l kxBl 04 ,Bc02i?;圖4.3.1 TCP包運行結果4.3.2 UDP 包if(pIpheader->ip_p)=IPPROTO_UDP&&lentcp!=0)pCount+;dataudp=(unsignedchar*)RecvBuf+sizeof(structipheader)+sizeof(struct udphdr);printf("-UDP-n");printf("n目的 IP 地址:%sn",szDestIP);prin
32、tf("n目的端口: %dn",ntohs(pT cpheader->dport);printf("UDP 數(shù)據(jù)地址:xn",dataudp);printf("IP頭部長度:%in",sizeof(struct ipheader);printf("UDP頭部長度:%in",sizeof(struct udphdr);printf("包的大小:%in",ntohs(pIpheader->ip_len);printf("nchar Packet%i %i=""
33、;,pCount,lenudp-1);for (i=0;i<lenudp;i+)printf("x%.2x",*(dataudp+i);if (i%10=0)printf(""n"");printf(""nnn");for (i=0;i<lenudp;i+)if( *(dataudp+i)<=127&&*(dataudp+i)>=20)printf("%c",*(dataudp+i);elseprintf(".");print
34、f("nn*n");)運行后的結果:r D:WIN我的文和-其巨-電費關TUt&KT口造商輅裸程母計UebugZOl3050135.皿*3T>*2Sk5H35 皿 738W6ESx£43Sx4F rM523(Sfi 53 Z 二八xtm1?LDDEHFCFIEDEIDlFPFEFJErFGFlEDFhftA. R HR GFP FHEHFDECFCE PFH UfcFFFFFA GAB.SH耽* 昌 .g,L *,5*$MLGL0T<B«OUSEMORWGROUP4.3GRXCH8UTV0FXCZ,XNKM X M MMKMKXXKM
35、KMMM MX M M MM. MX K K X X M K KX H JK K M X K KK-IIDP-目的 IPi也址:10.S3.91,255目的端口1 13BUDP加堀地址:IlFcEcI灰線亮2«U曖特限度;8包的大小 244char PnckuMOB 2亞:! - "511"'JWa 3oc:9 3fBpXie5bjcRl KwHR xH a st fl H'r' pXxc a Xx00Xx0BXx2 0x44x44X1(45 Xx48 x46Xx43 ,<4bK49Xx4E Kx44x4E 'k»4
36、9 S«4< m49 Sk4C k4G"346 x45 W4K Sxlrt Xx45 oc5 B k46 x43 54E549 "*x45 Xx44x46 Xx4bx41、x4i xBBXx20x*ll、x4W,T圖4.3.2 UDP包運行結果5總結通過這次課程設計,使我更加扎實的掌握了有關嗅探器方面的知識,在設計過程中雖然遇到了 一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足。這次課程設計不僅培養(yǎng)了我獨 立思考、動手操作的能力,在各種其它能力上也都有了提高。從理論到實踐,在這段日子里,不僅
37、可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才 能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。此次設計也讓我明白了思路即出路,有不懂或不明白的地方要及時請教或上網(wǎng)查 詢,只要認真鉆研,動腦思考,動手實踐,就沒有弄不懂的知識,收獲頗豐。參考文獻:1吳功宜,董大凡王培等.計算機網(wǎng)絡高級軟件編程技術【 M.北京:清華大學出版社,20082謝小特,王勇軍.基于winPcap的捕包程序設計【J】.軟件特刊,2007 (11 ) : 71-723
38、胡曉元史浩山.winpcap包截獲系統(tǒng)的分析及其應用【J】.計算機工程,2005 ( 1) : 96-974趙輝,葉子青.VisualC+系統(tǒng)開發(fā)實例精粹【 附件:M】,北京:人民郵電出版社,2005#include <winsock2.h>/*windowssocket的頭文件,系統(tǒng)定義的*/#include <windows.h>unsigned short int sport;port (源端口號)*/unsigned short int dport;/*source#include <ws2tcpip.h>/*destination port(目的端
39、口號)*/#include <stdio.h>#include <stdlib.h>unsigned int th_seq;number( 包的序列號 )*/*sequence#pragma comment(lib,"ws2_32.lib")/*unsigned int th_ack;鏈接API相關連的 Ws2_32.lib 靜態(tài)庫*/#define MAX_HOSTNAME_LAN 255#define SIO_RCVALL/*acknowledgement number( unsigned char th_x:4;/*unused(未使用)*/確
40、認應答號)*/_WSAIOW(IOC_VENDOR,1)#define MAX_ADDR_LEN 16unsigned char th_off:4;offset(數(shù)據(jù)偏移量)*/*datastruct ipheader unsigned char ip_hl:4;/*headerlength(報頭長度)*/unsigned char Flags;unsigned short int th_win;/*windows(窗 口 )*/*標志全*/unsigned char ip_v:4;/*version(本)*/版unsigned short int th_sum;/*checksum(校驗和)
41、*/unsigned char ip_tos;/*type osservice服務類型*/unsigned short int ip_len;/*totallength (總長度)*/unsigned short int th_urp; pointer( 緊急指針)*/ TCP_HDR;typedef struct udphdr /*urgentunsigned short int ip_id;/*identification (標識符)*/unsigned short int ip_off;unsigned short sport;port(源端口號)*/unsigned short dpo
42、rt;/*source"fragment offset field(段移位域)*/*destination port(目的端口號)*/unsigned char ip_ttl;/*time to live(生存時間)*/unsigned short len;length(udp 長度)*/*udpunsigned char ip_p;/*protocol( 協(xié)議)*/unsigned short int ip_sum;/*checksum(校驗和)*/unsigned int ip_src;/*sourceaddress(源地址)*/unsigned int ip_dst;/*des
43、tinationaddress(目的地址)*/unsigned short cksum; checksum(udp 校驗和)*/ UDP_HDR;void main()SOCKET sock;WSADATA wsd;DWORD dwBytesRet;unsigned int optval = 1;/*udp;/* total ip header length: 20 bytes (=160unsigned char *dataudp,*datatcp;int i,pCount=0,lentcp, lenudp;bits) */typedef struct tcpheader SOCKADDR_
44、IN sa,saSource, saDest;struct hostent FAR * pHostent;char FARnameMAX_HOSTNAME_LAN;char szSourceIPMAX_ADDR_LEN, szDestIPMAX_ADDR_LEN,RecvBuf65535 =0;struct udphdr *pUdpheader;struct ipheader *pIpheader;struct tcpheader *pTcpheader;WSAStartup(MAKEWORD(2,1),&wsd);if (sock = socket(AF_INET,SOCK_RAW,
45、IPPROTO_IP)=SOCKET_ERROR) exit(1);gethostname(name, MAX_HOSTNAME_LAN);pHostent = gethostbyname(name);sa.sin_family = AF_INET;sa.sin_port = htons(6000);memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list0, pHostent->h_length);bind(sock, (SOCKADDR *)&sa, sizeof(sa);/*bind() 設定自己主機的IP地
46、址和端口號*/if (WSAGetLastError()=10013) exit(1);WSAIoctl(sock, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &dwBytesRet, NULL, NULL);pIpheader = (struct ipheader*)RecvBuf;pTcpheader = (struct tcpheader *)(RecvBuf+ sizeof(struct ipheader );pUdpheader = (struct udphdr *) (RecvBuf+ sizeof(struct i
47、pheader );while (1) memset(RecvBuf, 0, sizeof(RecvBuf);recv(sock, RecvBuf, sizeof(RecvBuf), 0);saSource.sin_addr.s_addr = pIpheader->ip_src;inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN);saDest.sin_addr.s_addr = pIpheader->ip_dst;strncpy(szDestIP, inet_ntoa(saDest.sin_addr), MAX_ADDR_LEN);lentcp=
48、(ntohs(pIpheader->ip_len)-(sizeof(struct ipheader)+sizeof(struct tcpheader);lenudp=(ntohs(pIpheader->ip_len)-(sizeof(struct ipheader)+sizeof(struct udphdr);if(pIpheader->ip_p)=IPPROTO_TCP&&le ntcp!=0)printf("*n,);pCount+;datatcp=(unsigned char *)RecvBuf+sizeof(structipheader)+sizeof(struct tcpheader);printf("-TCP-n");printf("n目的 IP地址:%sn",szDestIP);printf(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 整燙承包合同協(xié)議書
- 技能培訓安全協(xié)議書
- 拆遷糾紛處理協(xié)議書
- 政府補貼商戶協(xié)議書
- 律師過錯賠償協(xié)議書
- 房屋白蟻賠償協(xié)議書
- 廢鋼采購外包協(xié)議書
- 挖機做事合同協(xié)議書
- 意外個人承擔協(xié)議書
- 房產(chǎn)比例變更協(xié)議書
- 2016年度高考全國3卷文綜地理試題(解析版)
- SIPOC培訓教材學習教案
- 江西新定額2017土建定額說明及解釋
- 國家電網(wǎng)有限公司十八項電網(wǎng)重大反事故措施(修訂版)-2018版(word文檔良心出品)
- 2019年重慶江津小升初數(shù)學真題及答案
- 部編版三下語文《宇宙的另一邊》教學課件PPT
- 電纜井工程量計算
- 《工程勘察設計收費管理規(guī)定》計價格200210號文
- 育種學 第6章雜交育種
- 附件一∶ 教育部專家實地評估案頭必備材料
- 火災撲救記錄表
評論
0/150
提交評論