




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、網(wǎng)絡(luò)安全編程技術(shù) 第第3講:數(shù)據(jù)包的捕獲與分析講:數(shù)據(jù)包的捕獲與分析 2 編程實(shí)現(xiàn)一個(gè)協(xié)議分析器。該協(xié)議分析器將包編程實(shí)現(xiàn)一個(gè)協(xié)議分析器。該協(xié)議分析器將包 含以下幾部分功能含以下幾部分功能 : 1.數(shù)據(jù)采集數(shù)據(jù)采集捕捉捕捉Ethernet網(wǎng)網(wǎng)絡(luò)絡(luò)數(shù)據(jù)包;數(shù)據(jù)包; 2.解析解析Ethernet網(wǎng)數(shù)據(jù)幀頭部的全部信息;網(wǎng)數(shù)據(jù)幀頭部的全部信息; 3.解析解析IP數(shù)據(jù)包的頭部信息;數(shù)據(jù)包的頭部信息; 4.解析解析TCP和和UDP包的頭部信息;包的頭部信息; 3 主要內(nèi)容 n用原始Socket抓包 n進(jìn)行協(xié)議分析 n使用開發(fā)工具包WinPcap抓包 4 1. 用原始Socket抓包流程 1.創(chuàng)建原始So
2、cket 2.獲取一個(gè)需要監(jiān)聽網(wǎng)絡(luò)接口的ip地址,并 綁定(必須要顯示綁定) 3.設(shè)置網(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) n應(yīng)用程序可以收到目標(biāo)是其它主機(jī)的包 n應(yīng)用程序會收到ip包 n如果設(shè)置IP_HDRINCL
3、 選項(xiàng),可以手動設(shè)置 發(fā)送的ip包的頭部 n不能攔截?cái)?shù)據(jù),因?yàn)橄到y(tǒng)采用的是拷貝的方 式 n由于安全原因,在xp-sp2,windows 7中原 始socket的使用有限制: n不能發(fā)送tcp包 n不能使用偽造的原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;
4、sock.sin_port = htons(5555); memcpy( Result = bind(SnifferSocket, (PSOCKADDR) 想想看這里端口號 有沒有意義,這個(gè) 值合不合適 一定是第一個(gè)接口 嗎? 8 獲取本地接口的更好方法 SOCKADDR_INinput; charremoteip=;/可以是任意地址 shortremoteport=80; charbuf1024; input.sin_family = AF_INET; input.sin_addr.s_addr = inet_addr(remoteip); input.sin_port = h
5、tons(remoteport); Result = WSAIoctl (SnifferSocket, SIO_ROUTING_INTERFACE_QUERY, SOCKADDR_IN *lpIf = (SOCKADDR_IN *)buf; 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ù),更復(fù)雜, 更強(qiáng)大。
6、 10 以太網(wǎng)卡的工作模式 n網(wǎng)卡的MAC地址(48位) n通過ARP來解析MAC與IP地址的轉(zhuǎn)換 n用ipconfig/ifconfig可以查看MAC地址 n正常情況下,網(wǎng)卡應(yīng)該只接收這樣的包 nMAC地址與自己相匹配的數(shù)據(jù)幀 n廣播包 n網(wǎng)卡完成收發(fā)數(shù)據(jù)包的工作,兩種接收模式 n混雜模式:不管數(shù)據(jù)幀中的目的地址是否與自己的地址匹配, 都接收下來 n非混雜模式:只接收目的地址相匹配的數(shù)據(jù)幀,以及廣播數(shù) 據(jù)包(和組播數(shù)據(jù)包) n為了監(jiān)聽網(wǎng)絡(luò)上的流量,必須設(shè)置為混雜模式 11 共享網(wǎng)絡(luò)和交換網(wǎng)絡(luò) n共享式網(wǎng)絡(luò) n通過網(wǎng)絡(luò)的所有數(shù)據(jù)包發(fā)往每一個(gè)主機(jī) n最常見的是通過HUB連接起來的子網(wǎng) n交換式網(wǎng)
7、絡(luò) n通過交換機(jī)連接網(wǎng)絡(luò) n由交換機(jī)構(gòu)造一個(gè)“MAC地址-端口”映射表 n發(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), 0, (struct sockaddr*) 13 n閱讀p227-229的代碼 n課后請上機(jī)測試
8、,并運(yùn)行 n注意:編譯時(shí)可能報(bào)錯,找不到頭文件 mstcpip.h,請自己上網(wǎng)查找資料來解決。 14 使用原始socket抓包的缺點(diǎn) n要求管理員權(quán)限; n在windows 7之前,該方法只能抓到進(jìn)來的 包; n沒有內(nèi)核級的過濾機(jī)制,只能有程序員自 己來過濾,既復(fù)雜又很慢,在千兆網(wǎng)上很 容易丟包; n不能獲取鏈路層信息; n不能獲取arp包。 15 2. 進(jìn)行協(xié)議分析 n目的:對抓獲的包進(jìn)行分析,是不是ip包, ip的頭部各個(gè)字段是什么,是不是tcp或udp 報(bào)文等待? n故首先我們需要對ip,tcp和udp等協(xié)議有所 了解,特別是它們的頭部字段。 16 2.1 TCP/IP協(xié)議族中的協(xié)議協(xié)議
9、族中的協(xié)議 用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程用戶進(jìn)程 TCPTCPUDPUDP ICMPICMPIPIPIGMPIGMP ARPARP硬件接口硬件接口RARPRARP 應(yīng)用層應(yīng)用層 傳輸層傳輸層 網(wǎng)絡(luò)層網(wǎng)絡(luò)層 網(wǎng)絡(luò)接口層網(wǎng)絡(luò)接口層 媒體媒體 那我們發(fā)送和接收 的數(shù)據(jù)包的大致格式 是什么樣的?請以一 個(gè)網(wǎng)頁包為例來說明。 17 2.2 協(xié)議分析的難點(diǎn) n在前面抓包程序的基礎(chǔ)上,增加簡單的協(xié) 議分析。 n協(xié)議分析的實(shí)質(zhì)就是識別各個(gè)協(xié)議頭,及 其頭部各個(gè)字段的含義。 n故為了程序的處理,必須定義協(xié)議頭的數(shù) 據(jù)結(jié)構(gòu)。 18 IP數(shù)據(jù)報(bào)格式 版本版本頭部長度頭部長度 服務(wù)類型服務(wù)
10、類型 (TOS) 總長度總長度(字節(jié)數(shù)字節(jié)數(shù)) 標(biāo)識符標(biāo)識符 3位位 標(biāo)志標(biāo)志 段偏移段偏移 生存時(shí)間生存時(shí)間 (TTL) 協(xié)議協(xié)議頭部校驗(yàn)和頭部校驗(yàn)和 源源IP地址地址 目的目的IP地址地址 選項(xiàng)(如果有)選項(xiàng)(如果有) 數(shù)據(jù)數(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; unsigned char Protoc
11、ol; unsigned short Checksum; unsigned int SourceAddr; unsigned int DestinationAddr; ; 假設(shè)已獲取一個(gè)ip頭部的 指針ip,如何獲取版本信 息呢? ip-Version_HLen 4 如何獲取頭部長度呢? (ip-Version_HLen n現(xiàn)在就可根據(jù)數(shù)據(jù)結(jié)構(gòu)IPHeader和ip頭的標(biāo) 準(zhǔn),來獲取ip頭部各個(gè)字段的值 n參見p233-p234的相關(guān)代碼,應(yīng)該寫成子函 數(shù)的形式。 21 如何判斷傳輸層的協(xié)議 #define TCP_PROTOCAL 6 #define UDP_PROTOCAL 17 unsi
12、gned char Prot=ip-Protocol; 22 TCP包首部數(shù)據(jù)格式 源端口號源端口號 ( 16位) 目的端口號目的端口號 ( 16位) 序號序號(32位) 確認(rèn)序號確認(rèn)序號(32位) 首部長首部長 度度(4位) 保留保留 (6位) U R G A C K P S H R S T S Y N F I N 窗口大小窗口大小 (16位) 校驗(yàn)和校驗(yàn)和(16位)緊急指針緊急指針(16位) 選項(xiàng)(任選,若有)選項(xiàng)(任選,若有) 填充填充 緊急數(shù)據(jù)緊急數(shù)據(jù) 數(shù)據(jù)數(shù)據(jù) 23 TCP頭 struct TcpHeader unsigned short SrcPort; unsigned shor
13、t 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 = (struct Tcp
14、Header*)(char *)ip + IpHeaderLength); n現(xiàn)在就可根據(jù)數(shù)據(jù)結(jié)構(gòu)TcpHeader和tcp頭的標(biāo)準(zhǔn), 來獲取tcp頭部各個(gè)字段的值 n參見p234-p235的相關(guān)代碼,應(yīng)該寫成子函數(shù)的 形式。 25 UDP報(bào)文格式 n端口號:表示發(fā)送進(jìn)程和接收進(jìn)程 nUDP長度:包括UDP頭和UDP數(shù)據(jù) nUDP報(bào)文校驗(yàn)和:可選,為0表示不做校驗(yàn) 26 UDP頭 struct UdpHeader unsigned short SrcPort; unsigned short DstPort; unsigned short Length; unsigned short Check
15、sum; ; 簡單得多 27 3 Winpcap概述 nWinpcap是libpcap在Win32平臺上移植,是一個(gè) 用于抓包和網(wǎng)絡(luò)分析的架構(gòu),且開源。 n捕獲原始數(shù)據(jù)包 ,包括鏈路層信息。 n有內(nèi)核級的過濾機(jī)制,用戶設(shè)置非常簡單 n獨(dú)立于主機(jī)協(xié)議(如TCP-IP)而發(fā)送和接收原始數(shù) 據(jù)報(bào)。也就是說,winpcap不能阻塞,過濾或控 制其他應(yīng)用程序數(shù)據(jù)報(bào)的收 發(fā)。 n很多軟件必須安裝WinPcap才能用的。比如 wireshark,網(wǎng)絡(luò)執(zhí)法管、P2P終結(jié)者、QQ第六感 等嗅探和監(jiān)控軟件 。 28 Winpcap的安裝 n下載winpcap的驅(qū)動程序和相應(yīng)版本的 wpdpack開發(fā)包 n安裝驅(qū)動
16、 n把wpdpack開發(fā)包解壓到自己選定的目錄 n在vc中(tools-option-directories)設(shè)定 include目錄和library目錄 n連接wpcap.lib 29 數(shù)據(jù)包捕獲流程圖 30 3.1 網(wǎng)絡(luò)設(shè)備的發(fā)現(xiàn) intpcap_findalldevs( pcap_if_t *alldev, char *errbuf); 返回一個(gè)指向網(wǎng)絡(luò)設(shè)備列表的指針。 返回值: -1:出錯 0:成功 pcap_freealldevs (pcap_if_t *alldev); 更復(fù)雜更強(qiáng)大的函數(shù) int pcap_findalldevs_ex (char * source, struct
17、 pcap_rmtauth * auth, pcap_if_t * alldevs, char * errbuf ) 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 sockad
18、dr *netmask; struct sockaddr *broadaddr; struct sockaddr *dstaddr;/ P2P ; 33 3.2 打開接口獲取抓包描述符 pcap_t *pcap_open_live( char *device, /接口名 int snaplen,/抓取數(shù)據(jù)包的最大長度, /多出部分將被截?cái)?int promisc, /是否為混雜模式 int to_ms, /讀多少毫秒的包后再返回 char *errorbuf); 用途:用來獲取一個(gè)抓包的 descriptor; 返回值為NULL表失敗 void pcap_close (pcap_t * p )
19、 34 3.3 設(shè)置filter nint pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) 把用戶容易理解的字符串形式的過濾規(guī)則str翻 譯成一個(gè)程序可以識別的過濾器規(guī)則fp nNetmask:被抓包的掩碼,用于檢查ipv4的廣播包 n返回值為-1時(shí)出錯 nint pcap_setfilter(pcap_t *p, struct bpf_program *fp) 設(shè)置一個(gè)過濾器 35 a.捕獲捕獲 MAC地址為地址為 00:d0:f8:00:00:03
20、網(wǎng)絡(luò)設(shè)備通信的所網(wǎng)絡(luò)設(shè)備通信的所 有報(bào)文有報(bào)文 ether host 00:d0:f8:00:00:03 b.捕獲捕獲 IP地址為地址為 網(wǎng)絡(luò)設(shè)備通信的所有報(bào)文網(wǎng)絡(luò)設(shè)備通信的所有報(bào)文 host c.捕獲網(wǎng)絡(luò)捕獲網(wǎng)絡(luò)web瀏覽的所有報(bào)文瀏覽的所有報(bào)文 tcp port 80 d.捕獲捕獲除了除了http外的所有通信數(shù)據(jù)報(bào)文外的所有通信數(shù)據(jù)報(bào)文 host and not tcp port 80 這些過濾規(guī)則也是軟件這些過濾規(guī)則也是軟件Ethereal直接使用的規(guī)則直接使用的規(guī)則 過濾規(guī)則舉例 36
21、 更一般的過濾規(guī)則 usrc|dst host uether src|dst host ugateway host usrc|dst net mask |len utcp|udp src|dst port uless|greater uip|ether proto uether|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出錯,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 char *packetdata) 參數(shù)winpcaphead:說明包的一些輔助信息, 包括時(shí)間,長度。 packetdata:捕獲的幀 39 以太網(wǎng)幀結(jié)構(gòu) n前導(dǎo)碼
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度按揭房轉(zhuǎn)讓中貸款還款責(zé)任協(xié)議
- 二零二五年度分手情侶分手后共同債務(wù)減免及豁免協(xié)議
- 2025年度跨境電商平臺股份轉(zhuǎn)讓協(xié)議模板
- 2025年板材行業(yè)市場調(diào)研與預(yù)測合同
- 二零二五年度鋼結(jié)構(gòu)施工現(xiàn)場安全管理與安全責(zé)任協(xié)議
- 貨車承運(yùn)合同范本
- 二零二五年度貸款合同簽訂流程與貸款政策調(diào)整應(yīng)對策略
- 學(xué)院團(tuán)總支年度工作總結(jié)
- 秋季傳染疾病預(yù)防教育
- 2025年中國全能肥市場調(diào)查研究報(bào)告
- COMMERCIAL INVOICE 商業(yè)發(fā)票模板
- 部編人教版四年級下冊道德與法治 第6課 有多少浪費(fèi)本可避免 教學(xué)課件PPT
- 精神衛(wèi)生醫(yī)聯(lián)體服務(wù)平臺
- 2023年北京春季流感中醫(yī)藥防治方案(試行)、春季流感治療相關(guān)中成藥推薦目錄
- 重慶市渝北區(qū)大灣鎮(zhèn)招錄村綜合服務(wù)專干模擬檢測試卷【共500題含答案解析】
- GB/T 5915-1993仔豬、生長肥育豬配合飼料
- 壓花藝術(shù)課件
- DB32T4220-2022消防設(shè)施物聯(lián)網(wǎng)系統(tǒng)技術(shù)規(guī)范-(高清版)
- (新版)老年人健康管理理論考試題庫(含答案)
- 感應(yīng)加熱操作規(guī)程
- 煤氣設(shè)施安全檢查表(修訂)
評論
0/150
提交評論