《网络数据包捕获与应用的VC++60编程.pdf》由会员分享,可在线阅读,更多相关《网络数据包捕获与应用的VC++60编程.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网网络络数数据包捕据包捕获获与与应应用的用的VC+6.0VC+6.0编编程程 美 美国国GeneChiuGeneChiu基金基金资资助助 网网络络数数据包捕据包捕获获与与应应用的用的VC+6.0VC+6.0编编程程 研研究生究生 方松茂方松茂 对对以太以太帧头帧头、IPv4IPv4报头报头、IPv6IPv6报头报头、TCPTCP报头报头及及UDPUDP报头报头格式格式这这几几种种常用常用数数据据报头报头别别利用利用WinPcapWinPcap和原始套接字和原始套接字编编写写程序程序进进行分析行分析。并并利用利用MFCMFC类库类库,采用采用链链表表结结构构存放捕存放捕获获的的网网络络数数据的方
2、案据的方案,实现实现了局域了局域网网内内InternetInternet数数据采集的据采集的应应用程序用程序。另另外外,还编还编写写了一了一个个利用利用WinPcapWinPcap提供的提供的发发送送数数据据报报的函的函数数实现实现SYN FloodSYN Flood的黑客攻的黑客攻击击程序程序。现对现对各程序各程序简简要介要介绍绍如下如下:程序源代程序源代码码如下如下:程序程序1 1 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获数数据包的以太据包的以太帧头帧头 程序名程序名:AnalyzeETH_WinPcap.CPPAnalyzeETH_WinPcap.CPP
3、程序名程序名:AnalyzeETH_WinPcap.CPPAnalyzeETH_WinPcap.CPP 程序程序2 2 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的IPv4IPv4数数据据报报包包头头 程序名程序名:AnalyzeIPv4_WinPcap.CPPAnalyzeIPv4_WinPcap.CPP 程序名程序名:AnalyzeIPv4_WinPcap.CPPAnalyzeIPv4_WinPcap.CPP 程序程序3 3 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的IPv6IPv6数数据据报报包包头头 程序名程序名:Ana
4、lyzeIPv6_WinPcap.CPPAnalyzeIPv6_WinPcap.CPP 程序名程序名:AnalyzeIPv4_WinPcap.CPPAnalyzeIPv4_WinPcap.CPP 程序程序4 4 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的TCPTCP数数据据报报包包头头 程序名程序名:AnalyzeTCP_WinPcap.CPPAnalyzeTCP_WinPcap.CPP 程序名程序名:AnalyzeTCP_WinPcap.CPPAnalyzeTCP_WinPcap.CPP 程序程序5 5 利用利用WinPcapWinPcap函函数数库库函函数
5、数解析捕解析捕获获的的UDPUDP数数据据报报包包头头 程序名程序名:AnalyzeUDP_WinPcap.CPPAnalyzeUDP_WinPcap.CPP 程序名程序名:AnalyzeUDP_WinPcap.CPPAnalyzeUDP_WinPcap.CPP 程序程序6 6 利用利用WinPcapWinPcap函函数数库库函函数数发发送送TCP SYNTCP SYN帧帧数数据据报报,进进行行SYNSYN洪水攻洪水攻击击 注意注意:本程序本程序仅仅供供学学习习参参考考,请请不要在不要在InternetInternet网网络络上使用上使用!程序名程序名:AnalyzeUDP_WinPcap.C
6、PPAnalyzeUDP_WinPcap.CPP 程序名程序名:AnalyzeUDP_WinPcap.CPPAnalyzeUDP_WinPcap.CPP 程序程序7 7 利用原始套接字捕利用原始套接字捕获获并并解析解析IPv4IPv4数数据包据包 程序名程序名:AnalyzeIPv4_WINSOCK.CPPAnalyzeIPv4_WINSOCK.CPP 程序名程序名:AnalyzeIPv4_WINSOCK.CPPAnalyzeIPv4_WINSOCK.CPP 页码,1/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/
7、E%27yan/09/032-fsm/index.asp 程序程序8 8 利用原始套接字捕利用原始套接字捕获获并并解析解析双双协议栈协议栈下下IPv6IPv6数数据包据包 程序名程序名:AnalyzeIPv6_WINSOCK.CPPAnalyzeIPv6_WINSOCK.CPP 程序名程序名:AnalyzeIPv6_WINSOCK.CPPAnalyzeIPv6_WINSOCK.CPP 程序程序9 9 利用原始套接字捕利用原始套接字捕获获并并解析解析TCPTCP数数据包据包 程序名程序名:AnalyzeTCP_WINSOCK.CPPAnalyzeTCP_WINSOCK.CPP 程序名程序名:An
8、alyzeTCP_WINSOCK.CPPAnalyzeTCP_WINSOCK.CPP 程序程序10 10 利用原始套接字捕利用原始套接字捕获获并并解析解析UDPUDP数数据包据包 程序名程序名:AnalyzeUDP_WINSOCK.CPPAnalyzeUDP_WINSOCK.CPP 程序名程序名:AnalyzeUDP_WINSOCK.CPPAnalyzeUDP_WINSOCK.CPP 程序程序11 11 利用原始套接字利用原始套接字发发送送TCP SYNTCP SYN帧帧,对对目目标标主机主机进进行行SYNSYN洪水攻洪水攻击击 程序名程序名:SYNFlood_WINSOCK.CPPSYNFl
9、ood_WINSOCK.CPP 注意注意:本程序本程序仅仅供供学学习习参参考考,请请不要在不要在InternetInternet网网络络上使用上使用!程序名程序名:SYNFlood_WINSOCK.CPPSYNFlood_WINSOCK.CPP 程序程序12 12 采集局域采集局域网网内内若干台主机若干台主机网网络络数数据据并并分析分析网网络络流量的流量的综综合合应应用程序用程序 可可执执行程序行程序:LANSecrutiny.exeLANSecrutiny.exe 程序程序运运行情行情况况:程序主要源代程序主要源代码码:LANScrutinyDlg.cppLANScrutinyDlg.cpp
10、 完整程序全部源代完整程序全部源代码码:LANSecrutiny.rarLANSecrutiny.rar 页码,2/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/E%27yan/09/032-fsm/index.asp编说编说明如下明如下:1 1结结构构体体说说明明 在程序中在程序中,我我们们将将要要进进行分析的各行分析的各数数据包据包头头格式用格式用结结构构体体进进行定行定义义。这样这样便于便于包的解析包的解析,使使每每个个字段字段清清楚易楚易懂懂。以太以太帧头帧头格式格式结结构构体体,共共1414个个字字节节:
11、typedef struct ether_header typedef struct ether_header unsigned char ether_dhost6;/unsigned char ether_dhost6;/目的目的MACMAC地址地址 unsigned char ether_shost6;/unsigned char ether_shost6;/源源MACMAC地址地址 unsigned short ether_type;/unsigned short ether_type;/协议类协议类型型 ETHHEADER,*PETHHEADER;ETHHEADER,*PETHHEAD
12、ER;IPv4IPv4报头报头格式格式结结构构体体,共共2020个个字字节节:typedef struct ipv4_header typedef struct ipv4_header unsigned char ver_ihl;/unsigned char ver_ihl;/版本 版本(4 bits)+4 bits)+首部首部长长度 度(4 bits)4 bits)unsigned char tos;/unsigned char tos;/服服务类务类型型 unsigned short tlen;/unsigned short tlen;/数数据据报总长报总长度度 unsigned shor
13、t identification;/unsigned short identification;/标识标识 unsigned short flags_fo;/unsigned short flags_fo;/标标志 志(3 bits)+3 bits)+片偏移 片偏移(13 bits)13 bits)unsigned char ttl;/unsigned char ttl;/生存生存时间时间 unsigned char proto;/unsigned char proto;/协议协议 unsigned short crc;/unsigned short crc;/首部校首部校验验和和 u_cha
14、r ip_src4;/u_char ip_src4;/源源IPIP地址地址 u_char ip_dst4;/u_char ip_dst4;/目的目的IPIP地址地址 IPHEADER,*PIPHEADER;IPHEADER,*PIPHEADER;IPv6IPv6报头报头格式格式结结构构体体,共共4040个个字字节节:typedef struct ipv6_header typedef struct ipv6_header u_char ver_tf;/u_char ver_tf;/版本版本号号(4 bit4 bit)u_char traffic;/u_char traffic;/优优先先级级(
15、8 bit8 bit)u_short label;/u_short label;/流流标识标识(20 bit20 bit)u_char length2;/u_char length2;/报报文文长长度度(16 bit16 bit)u_char next_header;/u_char next_header;/下一下一头头部部(8 bit8 bit)u_char limits;/u_char limits;/跳跳数数限制限制(8 bit8 bit)u_char Srcv616;/u_char Srcv616;/源源IPv6IPv6地址地址(128 bit128 bit)u_char Destv6
16、16;/u_char Destv616;/目的目的IPv6IPv6地址地址(128 bit128 bit)IPv6_HEADER,*PIPv6_HEADER;IPv6_HEADER,*PIPv6_HEADER;TCPTCP报头报头格式格式结结构构体体,共共2020个个字字节节:typedef struct tcp_header typedef struct tcp_header 页码,3/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/E%27yan/09/032-fsm/index.asp WORD SourPor
17、t;/WORD SourPort;/源端口源端口号号 WORD DestPort;/WORD DestPort;/目的端口目的端口号号 DWORD SeqNo;/DWORD SeqNo;/序序号号 DWORD AckNo;/DWORD AckNo;/确确认认序序号号 BYTE HLen;/BYTE HLen;/首部首部长长度度(保留位保留位)BYTE Flag;/BYTE Flag;/标识标识(保留位保留位)WORD Window;/WORD Window;/窗口大小窗口大小 WORD ChkSum;/WORD ChkSum;/校校验验和和 WORD UrgPtr;/WORD UrgPtr;/
18、紧紧急指急指针针 TCPHEADER,*PTCPHEADER;TCPHEADER,*PTCPHEADER;UDPUDP报头报头格式格式结结构构体体,共共8 8个个字字节节:typedef struct udp_header typedef struct udp_header u_short sport;/u_short sport;/源端口源端口号号 u_short dport;/u_short dport;/目的端口目的端口号号 u_short len;/u_short len;/数数据据报长报长度度 u_short crc;/u_short crc;/校校验验和和 UDPHEADER,*P
19、UDPHEADER;UDPHEADER,*PUDPHEADER;2 2程序程序说说明明 程序程序1 1 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获数数据包的以太据包的以太帧头帧头 程序名程序名:AnalyzeETH_WinPcap.htmAnalyzeETH_WinPcap.htm 该该程序通程序通过过利用利用WinPcapWinPcap提供的捕提供的捕获获数数据包函据包函数数,对对网网络络中的中的数数据包据包进进行采集分析行采集分析WinPcapWinPcap中提供的函中提供的函数数pcap_open_livepcap_open_live()()可以可以获获取取
20、网网络络适适配器配器,通通过过函函数数pcap_looppcap_loopp,int cnt,pcap_handle dispatch_handle,u_char*userp,int cnt,pcap_handle dispatch_handle,u_char*user)直接深入到直接深入到数数据据链链路路层进层进获获,将将捕捕获获的的数数据据传传到函到函数数dispatch_handledispatch_handle(u_char*,const pcap_pkthdr*header,const u_char u_char*,const pcap_pkthdr*header,const u_c
21、har*pkt_data*pkt_data)中中,该该函函数数的的参数参数pkt_datapkt_data指向的即是捕指向的即是捕获获的的数数据包据包。这样这样,我我们们可以捕可以捕网网内数内数据据链链路路层层的以太的以太帧帧,并并按照以太按照以太帧头帧头格式格式对对数数据包据包进进行解析行解析,以以获获得以太得以太帧头帧头关关信息信息。同同时时将将捕捕获获数数据存入磁据存入磁盘盘中中。通通过该过该程序程序,可以分析出局域可以分析出局域网网内内传输传输的各的各数数据包的情据包的情况况。程序完整代程序完整代码详见码详见程序程序1 1(AnalyzeETH_WinPcap.CPPAnalyzeET
22、H_WinPcap.CPP)。)。程序程序2 2 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的IPv4IPv4数数据据报报包包头头 程序名程序名:AnalyzeIPv4_WinPcap.CPPAnalyzeIPv4_WinPcap.CPP 该该程序同程序同样样通通过过WinPcapWinPcap提供的函提供的函数数,获获取取网网络络适适配器配器,利用函利用函数数pcap_looppcap_loop(p,int cnt,pcap_handle dispatch_handle,u_char*userp,int cnt,pcap_handle dispatch_han
23、dle,u_char*user)捕捕获获数数据包据包。并并将将捕捕获获dispatch_handledispatch_handle(u_char*,const pcap_pkthdr*header,const u_char*pkt_datau_char*,const pcap_pkthdr*header,const u_char*pkt_data对对以太以太帧帧包包进进行行过滤过滤,将将以太以太帧头帧头中中协议类协议类型字段型字段(ether_typeether_type)中中值值为为0 x08000 x0800的的行解析行解析,即可得到整即可得到整个个IPv4IPv4分分组组的信息的信息,其
24、中其中从从IPv4IPv4数数据据报头开报头开始的前始的前2020个个字字节为节为包包头头信息字段信息字段。同同时时将将解析出的相解析出的相关关数数据字段存入磁据字段存入磁盘盘中中。通通过该过该程序程序,可以分析局域可以分析局域各主机的各主机的网网络络使用情使用情况况。程序完整代程序完整代码详见码详见程序程序2 2(AnalyzeIPv4_WinPcap.CPPAnalyzeIPv4_WinPcap.CPP)。)。程序程序3 3 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的IPv6IPv6数数据据报报包包头头 程序名程序名:AnalyzeIPv6_WinPcap
25、.CPPAnalyzeIPv6_WinPcap.CPP 页码,4/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/E%27yan/09/032-fsm/index.asp 由于由于WinPcapWinPcap提供的函提供的函数数可以深入到可以深入到数数据据链链路路层层去捕去捕获获数数据包据包,因此因此无无论论是是IPv4IPv4包包还还是是IPv6IPv6数数据包都是被封据包都是被封装装在以太在以太帧头帧头中中,因此都能因此都能够够被捕被捕获获。本程序利用本程序利用WinPcapWinPcap供的函供的函数数,实现实
26、现了了过滤过滤捕捕获获并并解析在解析在纯纯IPv6IPv6环环境或境或双双协议栈环协议栈环境下境下传输传输的的IPv6IPv6数数据包据包获获的的数数据包以太据包以太帧头帧头中中协议类协议类型型(ether_typeether_type)字段字段值值为为0 x86DD0 x86DD,则该则该数数据包据包为纯为纯境下境下传输传输的的IPv6IPv6数数据包据包,将随将随后的后的4040个个字字节节按照按照IPv6IPv6包包头头格式解析格式解析,即可得到即可得到IPv6IPv6中中携携带带的信息的信息。对对捕捕获获的的数数据包据包进进行行过滤过滤,在在过滤过滤出的出的IPv4IPv4数数据包中分
27、析据包中分析IPv4IPv4包包头头protoproto字段字段值值为为0 x290 x29的的数数据包即据包即为为双双协议栈协议栈下下IPv6IPv6数数据包据包,于是于是将将IPv4IPv4包包头头后的后的4040个个节节按照按照IPv6IPv6包包头头格式解析格式解析,即可得到即可得到IPv6IPv6包包头头中中携携带带的信息的信息。同同样样,解析解析过过程都在函程都在函dispatch_handledispatch_handle(u_char*,const pcap_pkthdr*header,const u_char*pkt_datau_char*,const pcap_pkthdr
28、*header,const u_char*pkt_data if(eth_headerif(eth_header-Etype0=0 x86ð_headerEtype0=0 x86ð_header-Etype1=0 xDD)Etype1=0 xDD)/纯纯IPv6IPv6环环境下境下传输传输的的IPv6IPv6数数据包据包 else if(eth_headerelse if(eth_header-Etype0=0 x08ð_headerEtype0=0 x08ð_header-Etype1=0 x00)Etype1=0 x00)if(ip_headerif(ip_head
29、er-prote=0 x29)prote=0 x29)/双双协议栈环协议栈环境下境下传输传输的的IPv6IPv6数数据包据包 该该程序程序还进还进一一步步对对IPv6IPv6中封中封装装的的TCPTCP、ICMPv6ICMPv6、UDPUDP包包头进头进行了解析行了解析,其中其中TCPTCP、UDPUDP包包头头格式格式与与IPv4IPv4版本中的相同版本中的相同。通通过该过该程序程序,可以捕可以捕获获不同不同网网络环络环境下封境下封装装的的IPv6IPv6数数据包据包,并并进进行分析行分析。完整代完整代见见程序程序3 3(AnalyzeIPv6_WinPcap.CPPAnalyzeIPv6_
30、WinPcap.CPP)。)。程序程序4 4 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的TCPTCP数数据据报报包包头头 程序名程序名:AnalyzeTCP_WinPcap.CPPAnalyzeTCP_WinPcap.CPP 该该程序通程序通过过利用利用WinPcapWinPcap提供的函提供的函数数pcap_looppcap_loop(pcap_t*p,int cnt,pcap_handle pcap_t*p,int cnt,pcap_handle dispatch_handle,u_char*userdispatch_handle,u_char*user)
31、将数将数据包捕据包捕获获。并并在在dispatch_handledispatch_handle(u_char*,const pcap_pkthdr u_char*,const pcap_pkthdr*header,const u_char*pkt_data*header,const u_char*pkt_data)中通中通过编过编写写代代码实现码实现解析解析。由于由于pkt_datapkt_data中存放的是整中存放的是整太太帧帧,因此只要因此只要将将指指针针跳到跳到TCPTCP包包头开头开始始处处,然后按照然后按照TCPTCP包包头头格式解析就可以格式解析就可以读读出其中出其中信息信息。程序
32、中在解析程序中在解析数数据包的同据包的同时时,将将解析解析结结果存放到磁果存放到磁盘盘文件中文件中。该该程序通程序通过对过对头头的解析的解析,并并进进行分析行分析,可以推可以推断断网网络络中是否存在某些中是否存在某些网网络络攻攻击击行行为为。完整代完整代码详见码详见(AnalyzeTCP_WinPcap.CPPAnalyzeTCP_WinPcap.CPP)。)。程序程序5 5 利用利用WinPcapWinPcap函函数数库库函函数数解析捕解析捕获获的的UDPUDP数数据据报报包包头头 程序名程序名:AnalyzeUDP_WinPcap.CPPAnalyzeUDP_WinPcap.CPP 该该程
33、序程序与与AnalyzeTCP.CPPAnalyzeTCP.CPP程序基本一程序基本一样样,通通过过利用利用WinPcapWinPcap提供的函提供的函数数pcap_looppcap_loop(pcap_t*p,int cnt,pcap_handle dispatch_handle,u_char*userpcap_t*p,int cnt,pcap_handle dispatch_handle,u_char*user)将数将数据包捕据包捕dispatch_handledispatch_handle(u_char*,const pcap_pkthdr*header,const u_char*pkt
34、_datau_char*,const pcap_pkthdr*header,const u_char*pkt_data实现实现解析解析。只要只要将将指指针针改改为为跳到跳到UDPUDP包包头开头开始始处处,然后按照然后按照UDPUDP包包头头格式解析就可以格式解析就可以其中信息其中信息。程序中在解析程序中在解析数数据包的同据包的同时时,将将解析解析结结果存放到磁果存放到磁盘盘文件中文件中。完整代完整代码详见码详见5 5(AnalyzeUDP_WinPcap.CPPAnalyzeUDP_WinPcap.CPP)。)。程序程序6 6 利用利用WinPcapWinPcap函函数数库库函函数数发发送送
35、TCP SYNTCP SYN帧帧数数据据报报,进进行行SYNSYN洪水攻洪水攻击击 程序名程序名:SYNFlood_WinPcap.CPPSYNFlood_WinPcap.CPP 功能功能强强大的大的WinPcapWinPcap函函数数库库不但能不但能够够捕捕获获网网络络中的中的数数据据,还还能利用能利用它它提供的函提供的函数数送自己送自己构构造造数数据据链链路路层层的的数数据据报报。因此因此,在本程序中在本程序中,我我们们自己自己构构造了一造了一个个SYNSYN帧帧TCPTCP据据报报,并并将将其封其封装装到我到我们们自己自己构构造的造的IPIP报头报头和以太和以太帧头帧头中中,其中其中IP
36、IP报头报头中的源中的源IPIP地址地址序中序中设为设为1.1.1.11.1.1.1)和以太和以太帧头帧头中的源中的源MACMAC地址地址(程序中程序中设为设为 页码,5/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/E%27yan/09/032-fsm/index.asp0 x00,0 x00,0 x00,0 x00,0 x00,0 x000 x00,0 x00,0 x00,0 x00,0 x00,0 x00)都是都是伪伪造的不存在的地址造的不存在的地址。将将大量大量请请求求联联接的接的数数不不断断地地发发送到目
37、送到目标标主机主机,而而对对方方无无法把回法把回应应数数据据报传报传回源主机回源主机,这样这样就就实现实现了了对对主机主机SYNSYN洪水攻洪水攻击击了了。程序中的程序中的关键关键在于在于,封封装装在在数数据据报报中的校中的校验验和必和必须须正正确确,否否则则目目标标不不会会做任何反映做任何反映。因此因此,程序中程序中实现实现了一了一个个计计算校算校验验和的函和的函数数,用于用于计计算算IPIP报头报头和和头头中的校中的校验验和字段和字段。校校验验和函和函数数代代码码如下如下:inline USHORT checksum(USHORT*buffer,int size)inline USHORT
38、 checksum(USHORT*buffer,int size)unsigned long cksum=0;unsigned long cksum=0;while(size 1)while(size 1)cksum+=*buffer+;cksum+=*buffer+;size size-=sizeof(USHORT);sizeof(USHORT);if(size)if(size)cksum+=*(UCHAR*)buffer;cksum+=*(UCHAR*)buffer;cksum=(cksum 16)+(cksum&0 xffff);cksum=(cksum 16)+(cksum&0 xff
39、ff);cksum+=(cksum 16);cksum+=(cksum 16);return(USHORT)(cksum);return(USHORT)(cksum);在在计计算算IPIP校校验验和和时时,bufferbuffer中存放的是中存放的是IPIP报头报头数数据据,而在而在计计算算TCPTCP校校验验和和时时,bufferbuffer中存放的是中存放的是TCPTCP伪头伪头部和部和TCPTCP头头部部数数据据。将将构构造好的造好的数数据据报报通通过过函函数数pcap_sendqueue_queue(pcap_send_queue*squeue,struct pcap_sendqueu
40、e_queue(pcap_send_queue*squeue,struct pcap_pkthdr*pktheader,u_char*pktdata)pcap_pkthdr*pktheader,u_char*pktdata)放到放到发发送送队队列中列中,再利用函再利用函数数 pcap_sendqueue_transmit(pcap_t*outdesc,pcap_send_queue*squeue,int sync)pcap_sendqueue_transmit(pcap_t*outdesc,pcap_send_queue*squeue,int sync)即可即可实现实现SYN FloodSYN
41、 Flood攻攻击击。完整代完整代码详见码详见程序程序6 6(SYNFlood_WinPcap.CPPSYNFlood_WinPcap.CPP)。)。程序程序7 7 利用原始套接字捕利用原始套接字捕获获并并解析解析IPv4IPv4数数据包据包 程序名程序名:AnalyzeIPv4_WINSOCK.CPPAnalyzeIPv4_WINSOCK.CPP 该该程序通程序通过过使用原始套接字使用原始套接字过滤过滤并并捕捕获获IPv4IPv4数数据包据包,并并对对捕捕获获数数据包据包进进行解析行解析分分为为三部分三部分,其中在函其中在函数数InitWinsock2InitWinsock2()()内内初始
42、化初始化Winsock2Winsock2。在函在函数数BindSocketBindSocket利用利用winsock2winsock2提供的函提供的函数数WSASocketWSASocket()()建立套接字建立套接字,由于只有原始套接字可以深入到由于只有原始套接字可以深入到络层络层捕捕获获数数据包据包,因此因此WSASocketWSASocket(int af,int type,int protocol,LPWSAPROTOCOL_INFO int af,int type,int protocol,LPWSAPROTOCOL_INFO lpPorotocolInfo,GROUP g,DWOR
43、D dwFlagslpPorotocolInfo,GROUP g,DWORD dwFlags)中中参数参数typetype要要设为设为SOCK_RAWSOCK_RAW。因因为为是捕是捕IPIP数数据包据包,参数参数protocolprotocol设为设为IPPROTO_IPIPPROTO_IP。然后然后将将套接字套接字进进行行绑绑定定。这样这样就可以就可以对对行行监监听听,捕捕获获网网络络中的中的IPv4IPv4数数据包了据包了。在函在函数数RecieveIPv4RecieveIPv4()()函函数数中中,对对捕捕获获的的数数解析解析。完整代完整代码详见码详见程序程序AnalyzeIPv4_W
44、INSOCK.CPPAnalyzeIPv4_WINSOCK.CPP。程序程序8 8 利用原始套接字捕利用原始套接字捕获获并并解析解析双双协议栈协议栈下下IPv6IPv6数数据包据包 程序名程序名:AnalyzeIPv6_WINSOCK.CPPAnalyzeIPv6_WINSOCK.CPP 该该程序通程序通过过使用原始套接字使用原始套接字过滤过滤并并捕捕获获双双协议栈协议栈下下IPv6IPv6数数据包据包,并并对对捕捕获获数数据包据包解析解析。与与程序程序AnalyzeIPv4_WINSOCK.CPPAnalyzeIPv4_WINSOCK.CPP一一样样,本程序分本程序分为为四部分四部分,分分别
45、别完成初始化套接完成初始化套接字字,建立建立并并绑绑定套接字定套接字,捕捕获获数数据包据包并并分析分析。因因为为IPv6IPv6数数据包封据包封装装在在IPv4IPv4包包头头中中,接字按接字按IPv4IPv4套接字的建立套接字的建立,即即WSASocketWSASocket(int af,int type,int int af,int type,int protocol,LPWSAPROTOCOL_INFO lpPorotocolInfo,GROUP g,DWORD dwFlagsprotocol,LPWSAPROTOCOL_INFO lpPorotocolInfo,GROUP g,DWOR
46、D dwFlags)中中参数参数设为设为AF_INETAF_INET,参数参数typetype要要设为设为SOCK_RAWSOCK_RAW。因因为为是捕是捕获获IPIP数数据包据包,参数参数protocolprotocol设为设为IPPROTO_IPIPPROTO_IP。完整代完整代码详见码详见程序程序AnalyzeIPv6_WINSOCK.CPPAnalyzeIPv6_WINSOCK.CPP。程序程序9 9 利用原始套接字捕利用原始套接字捕获获并并解析解析TCPTCP数数据包据包 程序名程序名:AnalyzeTCP_WINSOCK.CPPAnalyzeTCP_WINSOCK.CPP 页码,6
47、/8网络数据包捕获与应用的VC+6.0编程-美国GeneChiu基金资助2009-4-22http:/210.40.7.188/E%27yan/09/032-fsm/index.asp 该该程序通程序通过过使用原始套接字使用原始套接字过滤过滤并并捕捕获获TCPTCP数数据包据包,并并对对捕捕获获数数据包据包进进行解析行解析。序序AnalyzeIPv4_WINSOCK.CPPAnalyzeIPv4_WINSOCK.CPP一一样样,对对套接字套接字进进行初始化行初始化、建立建立并并绑绑定后定后,在在RecieveTCPRecieveTCP()()函函数数中中获获取取TCPTCP数数据包字段据包字段
48、,按照按照TCPTCP包包头头格式解析格式解析,可可获获取完整的取完整的TCPTCP数数据包据包数数完整代完整代码详见码详见程序程序AnalyzeTCP_WINSOCK.CPPAnalyzeTCP_WINSOCK.CPP。程序程序10 10 利用原始套接字捕利用原始套接字捕获获并并解析解析UDPUDP数数据包据包 程序名程序名:AnalyzeUDP_WINSOCK.CPPAnalyzeUDP_WINSOCK.CPP 该该程序通程序通过过使用原始套接字使用原始套接字过滤过滤并并捕捕获获UDPUDP数数据包据包,并并对对捕捕获获数数据包据包进进行解析行解析。序序AnalyzeTCP_WINSOCK
49、.CPPAnalyzeTCP_WINSOCK.CPP一一样样,对对套接字套接字进进行初始化行初始化、建立建立并并绑绑定后定后,在在RecieveTCPRecieveTCP()()函函数数中中获获取取TCPTCP数数据包字段据包字段,按照按照TCPTCP包包头头格式解析格式解析,可可获获取完整的取完整的TCPTCP数数据包据包数数完整代完整代码详见码详见程序程序AnalyzeUDP_WINSOCK.CPPAnalyzeUDP_WINSOCK.CPP。程序程序11 11 利用原始套接字利用原始套接字发发送送TCP SYNTCP SYN帧帧,对对目目标标主机主机进进行行SYNSYN洪水攻洪水攻击击
50、程序名程序名:SYNFlood_WINSOCK.CPPSYNFlood_WINSOCK.CPP 本程序利用原始套接字本程序利用原始套接字发发送送TCPTCP数数据包据包,对对目目标标主机主机进进行行SYN FloodSYN Flood攻攻击击。程序中函程序中函数数socket(AF_INET,SOCK_RAW,IPPROTO_IP);socket(AF_INET,SOCK_RAW,IPPROTO_IP);将将套接字套接字设为设为原始套接字原始套接字。并并通通过过函函数数setsockopt(SOCKET s,int level,int optname,const char*optval,int