數(shù)據(jù)包的捕獲與分析 文檔_第1頁
數(shù)據(jù)包的捕獲與分析 文檔_第2頁
數(shù)據(jù)包的捕獲與分析 文檔_第3頁
數(shù)據(jù)包的捕獲與分析 文檔_第4頁
數(shù)據(jù)包的捕獲與分析 文檔_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)安全編程技術(shù),第,3,講:數(shù)據(jù)包的捕獲與分析,任德斌,2,本講編程訓(xùn)練目標(biāo),編程實(shí)現(xiàn)一個(gè)協(xié)議分析器。該協(xié)議分析器將包,含以下幾部分功能,:,1.,數(shù)據(jù)采集,捕捉,Ethernet,網(wǎng)絡(luò)數(shù)據(jù)包;,2.,解析,Ethernet,網(wǎng)數(shù)據(jù)幀頭部的全部信息;,3.,解析,IP,數(shù)據(jù)包的頭部信息;,4.,解析,TCP,和,UDP,包的頭部信息;,3,主要內(nèi)容,?,用原始,Socket,抓包,?,進(jìn)行協(xié)議分析,?,使用開發(fā)工具包,WinPcap,抓包,4,1.,用原始,Socket,抓包流程,1.,創(chuàng)建原始,Socket,2.,獲取一個(gè)需要監(jiān)聽網(wǎng)絡(luò)接口的,ip,地址,并,綁定(必須要顯示綁定),3.,設(shè)

2、置網(wǎng)卡為混雜模式,4.,開始循環(huán)接收數(shù)據(jù),5.,關(guān)閉,Socket,5,關(guān)鍵代碼,1,:,創(chuàng)建原始,Socket,SnifferSocket = socket(AF_INET,SOCK_RAW,IPPROTO_IP,);,if (Result = SOCKET_ERROR),printf(socket failed with error %dn,WSAGetLastError();,return 0;,6,原始,socket,的特點(diǎn),?,應(yīng)用程序可以收到目標(biāo)是其它主機(jī)的包,?,應(yīng)用程序會(huì)收到,ip,包,?,如果設(shè)置,IP_HDRINCL,選項(xiàng),可以手動(dòng)設(shè)置,發(fā)送的,ip,包的頭部,?,不能攔截

3、數(shù)據(jù),因?yàn)橄到y(tǒng)采用的是拷貝的方,式,?,由于安全原因,在,xp-sp2,,,windows 7,中原,始,socket,的使用有限制:,?,不能發(fā)送,tcp,包,?,不能使用偽造的原,ip,地址,7,關(guān)鍵代碼,2,:綁定到一個(gè)本地,IP,地址,Result = gethostname(Name, 255);,pHostent = (struct hostent*)malloc(sizeof(struct,hostent);,pHostent = gethostbyname(Name);,SOCKADDR_IN sock;,sock.sin_family = AF_INET;,sock.sin_

4、port = htons(5555);,memcpy(,Result = bind(SnifferSocket, (PSOCKADDR),想,想看,這里端,口,號(hào),有,沒有,意義,,,這,個(gè),值合不合適,一,定是,第一個(gè),接,口,嗎?,8,獲取本地接口的更好方法,1.,SOCKADDR_IN,input;,2.,char,remoteip=;/,可以是任意地址,3.,short,remoteport=80;,4.,char,buf1024;,5.,input.sin_family = AF_INET;,6.,input.sin_addr.s_addr = inet_addr(re

5、moteip);,7.,input.sin_port = htons(remoteport);,8.,9.,Result =,WSAIoctl,(SnifferSocket,SIO_ROUTING_INTERFACE_QUERY, ,11.,sock.sin_addr=lpIf-sin_addr;,9,關(guān)鍵代碼,3,:設(shè)置為混雜模式,u_long,InOutParam=1;,Result =ioctlsocket(SnifferSocket,SIO_RCVALL, ,參數(shù),InOutParam,表示命令,SIO_RCVALL,的輸,入?yún)?shù),WSAIoctl,是相應(yīng)的,Winows,擴(kuò)展函數(shù),更

6、復(fù)雜,,更強(qiáng)大。,10,以太網(wǎng)卡的工作模式,?,網(wǎng)卡的,MAC,地址,(48,位,),?,通過,ARP,來解析,MAC,與,IP,地址的轉(zhuǎn)換,?,用,ipconfig/ifconfig,可以查看,MAC,地址,?,正常情況下,網(wǎng)卡應(yīng)該只接收這樣的包,?,MAC,地址與自己相匹配的數(shù)據(jù)幀,?,廣播包,?,網(wǎng)卡完成收發(fā)數(shù)據(jù)包的工作,兩種接收模式,?,混雜模式:不管數(shù)據(jù)幀中的目的地址是否與自己的地址匹配,,都接收下來,?,非混雜模式:只接收目的地址相匹配的數(shù)據(jù)幀,以及廣播數(shù),據(jù)包,(,和組播數(shù)據(jù)包,),?,為了監(jiān)聽網(wǎng)絡(luò)上的流量,必須設(shè)置為混雜模式,11,共享網(wǎng)絡(luò)和交換網(wǎng)絡(luò),?,共享式網(wǎng)絡(luò),?,通過網(wǎng)

7、絡(luò)的所有數(shù)據(jù)包發(fā)往每一個(gè)主機(jī),?,最常見的是通過,HUB,連接起來的子網(wǎng),?,交換式網(wǎng)絡(luò),?,通過交換機(jī)連接網(wǎng)絡(luò),?,由交換機(jī)構(gòu)造一個(gè)“,MAC,地址,-,端口”映射表,?,發(fā)送包的時(shí)候,只發(fā)到特定的端口上,12,關(guān)鍵代碼,4,:讀取數(shù)據(jù),char Packet60000;,Result =,recv,(SnifferSocket, Packet,sizeof(Packet), 0);,還有沒有更好的處理?,struct sockaddr_in from;,int fromlen ;,Result =,recvfrom,(SnifferSocket, Packet,sizeof(Packet)

8、, 0, (struct,sockaddr*),13,?,閱讀,p227-229,的代碼,?,課后請(qǐng)上機(jī)測(cè)試,并運(yùn)行,?,注意:編譯時(shí)可能報(bào)錯(cuò),找不到頭文件,mstcpip.h,,請(qǐng)自己上網(wǎng)查找資料來解決。,14,使用原始,socket,抓包的缺點(diǎn),?,要求管理員權(quán)限;,?,在,windows 7,之前,該方法只能抓到進(jìn)來的,包;,?,沒有內(nèi)核級(jí)的過濾機(jī)制,只能有程序員自,己來過濾,既復(fù)雜又很慢,在千兆網(wǎng)上很,容易丟包;,?,不能獲取鏈路層信息;,?,不能獲取,arp,包。,15,2.,進(jìn)行協(xié)議分析,?,目的:對(duì)抓獲的包進(jìn)行分析,是不是,ip,包,,ip,的頭部各個(gè)字段是什么,是不是,tcp,

9、或,udp,報(bào)文等待?,?,故首先我們需要對(duì),ip,,,tcp,和,udp,等協(xié)議有所,了解,特別是它們的頭部字段。,16,2.1 TCP/IP,協(xié)議族中的協(xié)議,用戶進(jìn)程,用戶進(jìn)程,用戶進(jìn)程,用戶進(jìn)程,TCP,UDP,ICMP,IP,IGMP,ARP,硬件接口,RARP,應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,網(wǎng)絡(luò)接口層,媒體,那我們發(fā)送和接收,的數(shù)據(jù)包的大致格式,是什么樣的?請(qǐng)以一,個(gè)網(wǎng)頁包為例來說明。,17,2.2,協(xié)議分析的難點(diǎn),?,在前面抓包程序的基礎(chǔ)上,增加簡(jiǎn)單的協(xié),議分析。,?,協(xié)議分析的實(shí)質(zhì)就是識(shí)別各個(gè)協(xié)議頭,及,其頭部各個(gè)字段的含義。,?,故為了程序的處理,必須定義協(xié)議頭的數(shù),據(jù)結(jié)構(gòu)。,18,

10、IP,數(shù)據(jù)報(bào)格式,版本,頭部長(zhǎng)度,服務(wù)類型,(,TOS,),總長(zhǎng)度,(,字節(jié)數(shù),),標(biāo)識(shí)符,3,位,標(biāo)志,段偏移,生存時(shí)間,(,TTL,),協(xié)議,頭部校驗(yàn)和,源,IP,地址,目的,IP,地址,選項(xiàng)(如果有),0 3 4 7 8 15 16 31,20,字節(jié),數(shù)據(jù),19,IP,頭,struct IPHeader,unsigned char Version_HLen;,unsigned char TOS;,unsigned short Length;,unsigned short Ident;,unsigned short Flags_Offset;,unsigned char TTL;,unsi

11、gned char Protocol;,unsigned short Checksum;,unsigned int SourceAddr;,unsigned int DestinationAddr;,;,假設(shè)已獲取一個(gè),ip,頭部的,指針,ip,,如何獲取版本信,息呢?,ip-Version_HLen, 4,如何獲取頭部長(zhǎng)度呢?,(ip-Version_HLen,?,現(xiàn)在就可根據(jù)數(shù)據(jù)結(jié)構(gòu),IPHeader,和,ip,頭的標(biāo),準(zhǔn),來獲取,ip,頭部各個(gè)字段的值,?,參見,p233-p234,的相關(guān)代碼,應(yīng)該寫成子函,數(shù)的形式。,21,如何判斷傳輸層的協(xié)議,#define TCP_PROTOCAL

12、 6,#define UDP_PROTOCAL 17,unsigned char Prot=ip-Protocol;,22,TCP,包首部數(shù)據(jù)格式,源端口號(hào),(,16,位),目的端口號(hào),(,16,位),序號(hào),(,32,位),確認(rèn)序號(hào),(,32,位),首部長(zhǎng),度,(4,位,),保留,(,6,位),U,R,G,A,C,K,P,S,H,R,S,T,S,Y,N,F,I,N,窗口大小,(,16,位),校驗(yàn)和,(,16,位),緊急指針,(,16,位),選項(xiàng)(任選,若有),填充,緊急數(shù)據(jù),數(shù)據(jù),23,TCP,頭,struct TcpHeader,unsigned short SrcPort;,unsigne

13、d short DstPort;,unsigned int SequenceNum;,unsigned int Acknowledgment;,unsigned char HdrLen;,unsigned char Flags;,unsigned short AdvertisedWindow;,unsigned short Checksum;,unsigned short UrgPtr;,;,假設(shè)已獲取一個(gè),tcp,頭部,的指針,tcp,,如何獲取源,端口?,ntohs(tcp-SrcPort),如何判斷是不是,SYN,包?,(tcp-Flags,struct TcpHeader *tcp =

14、 (struct,TcpHeader*)(char *)ip + IpHeaderLength);,?,現(xiàn)在就可根據(jù)數(shù)據(jù)結(jié)構(gòu),TcpHeader,和,tcp,頭的標(biāo)準(zhǔn),,來獲取,tcp,頭部各個(gè)字段的值,?,參見,p234-p235,的相關(guān)代碼,應(yīng)該寫成子函數(shù)的,形式。,25,UDP,報(bào)文格式,?,端口號(hào):表示發(fā)送進(jìn)程和接收進(jìn)程,?,UDP,長(zhǎng)度:包括,UDP,頭和,UDP,數(shù)據(jù),?,UDP,報(bào)文校驗(yàn)和:可選,為,0,表示不做校驗(yàn),26,UDP,頭,struct UdpHeader,unsigned short SrcPort;,unsigned short DstPort;,unsigned

15、 short Length;,unsigned short Checksum;,;,簡(jiǎn)單得多,27,3 Winpcap,概述,?,Winpcap,是,libpcap,在,Win32,平臺(tái)上移植,是一個(gè),用于抓包和網(wǎng)絡(luò)分析的架構(gòu),且開源。,?,捕獲原始數(shù)據(jù)包,,包括鏈路層信息。,?,有內(nèi)核級(jí)的過濾機(jī)制,用戶設(shè)置非常簡(jiǎn)單,?,獨(dú)立于主機(jī)協(xié)議(如,TCP-IP),而發(fā)送和接收原始數(shù),據(jù)報(bào)。也就是說,,winpcap,不能阻塞,過濾或控,制其他應(yīng)用程序數(shù)據(jù)報(bào)的收,發(fā)。,?,很多軟件必須安裝,WinPcap,才能用的。比如,wireshark,,網(wǎng)絡(luò)執(zhí)法管、,P2P,終結(jié)者、,QQ,第六感,等嗅探和監(jiān)控

16、軟件,。,28,Winpcap,的安裝,?,下載,winpcap,的驅(qū)動(dòng)程序和相應(yīng)版本的,wpdpack,開發(fā)包,?,安裝驅(qū)動(dòng),?,把,wpdpack,開發(fā)包解壓到自己選定的目錄,?,在,vc,中(,tools-option-directories,)設(shè)定,include,目錄和,library,目錄,?,連接,wpcap.lib,29,數(shù)據(jù)包捕獲流程圖,pcap_findalldevs(),獲取,網(wǎng)絡(luò)設(shè)備列表,pcap_open_live(),打開設(shè)備,,設(shè)為混雜模式,pcap_compile(),編譯過濾器,pcap_setfilter(),設(shè)置過濾器,pcap_next_ex(),循環(huán)捕

17、獲數(shù)據(jù)包,pcap_freealldevs(),關(guān)閉網(wǎng)絡(luò)設(shè)備,PacketHandler(),處理數(shù)據(jù)包,30,3.1,網(wǎng)絡(luò)設(shè)備的發(fā)現(xiàn),int,pcap_findalldevs( pcap_if_t *alldev,char *errbuf);,返回一個(gè)指向網(wǎng)絡(luò)設(shè)備列表的指針。,返回值:,-1,:出錯(cuò),0,:成功,pcap_freealldevs (pcap_if_t *alldev);,更復(fù)雜更強(qiáng)大的函數(shù),int pcap_findalldevs_ex (char *,source,struct,pcap_rmtauth,*,auth,pcap_if_t,*,alldevs,char,*,e

18、rrbuf,),31,接口,struct pcap_if ,struct pcap_if *next;,/,下一個(gè)接口,char *name;,/,接口名,char *description;,struct pcap_addr *addresses;,bpf_u_int32 flags;,/,目前只支,PCAP_IF_LOOPBACK,;,32,接口地址,struct pcap_addr ,struct pcap_addr *next;,struct sockaddr *addr;,struct sockaddr *netmask;,struct sockaddr *broadaddr;,st

19、ruct sockaddr *dstaddr;,/ P2P,;,33,3.2,打開接口獲取抓包描述符,pcap_t *,pcap_open_live,(,char *device, /,接口名,int snaplen,/,抓取數(shù)據(jù)包的最大長(zhǎng)度,,/,多出部分將被截?cái)?int promisc, /,是否為混雜模式,int to_ms, /,讀多少毫秒的包后再返回,char *errorbuf);,用途:,用來獲取一個(gè)抓包的,descriptor,;,返回值為,NULL,表失敗,void pcap_close (,pcap_t,*,p,),34,3.3,設(shè)置,filter,?,int,pcap_c

20、ompile,(pcap_t *p, struct,bpf_program *fp, char *str, int optimize,bpf_u_int32 netmask),把用戶容易理解的字符串形式的過濾規(guī)則,str,翻,譯成一個(gè)程序可以識(shí)別的過濾器規(guī)則,fp,?,Netmask,:被抓包的掩碼,用于檢查,ipv4,的廣播包,?,返回值為,-1,時(shí)出錯(cuò),?,int,pcap_setfilter,(pcap_t *p, struct,bpf_program *fp),設(shè)置一個(gè)過濾器,35,a.,捕獲,MAC,地址為,00:d0:f8:00:00:03,網(wǎng)絡(luò)設(shè)備通信的所,有報(bào)文,ether h

21、ost 00:d0:f8:00:00:03,b.,捕獲,IP,地址為,,網(wǎng)絡(luò)設(shè)備通信的所有報(bào)文,host ,c.,捕獲網(wǎng)絡(luò),web,瀏覽的所有報(bào)文,tcp port 80,d.,捕獲,,除了,http,外的所有通信數(shù)據(jù)報(bào)文,host and not tcp port 80,這些過濾規(guī)則也是軟件,Ethereal,直接使用的規(guī)則,過濾規(guī)則舉例,36,更一般的過濾規(guī)則,?,src|dst host ,?,ether src|dst host ,?,gateway host ,?,src|dst net

22、 mask |len ,?,tcp|udp src|dst port ,?,less|greater ,?,ip|ether proto ,?,ether|ip broadcast|multicast,37,3.4,捕獲數(shù)據(jù),int,pcap_loop,(pcap_t *p,int cnt, /,捕獲的最大數(shù)目,,-1,表無限,pcap_handler callback, /,用戶的處理函數(shù),u_char *user/,回調(diào)函數(shù)的參數(shù),),返回值:,-1,出錯(cuò),,0,表,cnt,耗盡,int pcap_next_ex (,pcap_t,*,p,struct,pcap_pkthdr,*,pkt_header,const u_char *,pkt_data,),38,3.5,用戶的包處理函數(shù),void CallbackFunc(unsigned char *user,const struct pcap_pkthdr *winpcaphead,const unsigned cha

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論