编写自己的网络嗅探器1国家计算机网络入侵防范中心陈深龙、刘奇旭主要内容2实验介绍开发前准备工作配置开发环境用WinPcap捕获数据包分析数据包实验过程中可能遇到的问题实验要求一、实验介绍3实验目的实验内容当前流行的嗅探器以前学生开发的嗅探器实验目的通过开发基于WinPcap的嗅探器,掌握嗅探器的工作原理,熟悉WinPcap的使用,掌握基于WinPcap网络嗅探器的开发过程。4实验内容开发出一个Windows平台上的Sniffer工具,能显示所捕获的数据包并能做相应的分析和统计。主要内容如下:列出监测主机的所有网卡,选择一个网卡,设置为混杂模式进行监听。捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。将所开发工具的捕获和分析结果与常用的Sniffer进行比较,完善程序代码。5当前流行的嗅探器当前公认的比较好的嗅探器有WiresharkSnifferPro6Wireshark主界面7控制列封包总览封包内容十六进制码SnifferPro主界面8控制列封包总览封包内容十六进制码以前学生的嗅探器优秀作品1主界面设置过滤器优秀作品29优秀作品1—主界面10优秀作品1—设置过滤器11作秀作品212数据包统计信息数据包分析十六进制码数据包列表二、开发前准备工作13开发工具不可或缺的环境WinPcap简介WinPcap功能WinPcap架构WinPcap入门参考资源WinPcap经典论文开发工具开发语言:C++集成开发环境vc6.0vs.net2003~201014不可或缺的环境WinPcapV4.1.2:驱动程序、Dll文件WinPcapV4.1.2Developer’sPack:库文件、头文件、简单的示例程序代码和帮助文件15WinPcap简介WinPcap(WindowsPacketCapture)是Windows平台下的链路层网络访问工具,其目的在于为Windows应用程序提供访问网络底层的能力。官方网站:当前的版本StablereleaseWinPcap4.1.2LatestreleaseWinPcap4.1.216WinPcap的功能获得网卡设备列表及其高级信息打开一个网卡适配器并将其设置成混杂模式捕获数据包设置过滤器将数据包存储为文件并处理离线文件发送数据包收集网络通信流量的统计信息但是,WinPcap不能修改数据包或者拦截数据包17WinPcap架构NPF,NetgroupPacketFilter,内核级的数据报过滤器packet.dll,底层的动态连接库wpcap.dll,架构在packet.dll之上,提供了更方便、更直接的编程方法18架构图19WinPcap架构之NPFNPF是WinPcap的核心部件,它处理网络传输的数据包,并向应用层提供捕捉、发送和分析数据包的服务20WinPcap架构之packet.dllpacket.dll是一个提供了一系列底层函数的动态链接库,功能包括:安装、启动和停止NPF驱动设备对网络数据包进行嗅探发送原始的数据报获取网卡列表和每一个网络的相关信息对网卡查询和设置底层参数21WinPcap架构之wpcap.dllWpcap.dll是一个含有WinPcap公共API的动态链接库,它导出一系列函数供捕获网络数据包和分析网络,功能包括:对网络数据包进行嗅探发送原始的数据报获取网卡列表和每一个网络的相关信息将数据包信息保存到磁盘在更高层上创建包过滤规则并应用到底层22WinPcap入门参考资源WinPcap技术手册V4.1.2(anofflineversioncanbefoundinthedeveloper'spack):WinPcap中文技术手册V4.01(翻译版):经典论文[1]FulvioRisso,LorisDegioanni,AnArchitectureforHighPerformanceNetworkAnalysis.Proceedingforthe6thIEEESymposiumonComputersandCommunications(ISCC2001).HammmametJuly2001[2]LorisDegioanni,MarioBaldi,FulvioRisso,andGianlucaVarenn.ProfilingandOptimizationofSoftware-BasedNetworkAnalysisApplications24三、配置开发环境25在此我们用VC6.0所建的工程为例进行讲解添加头文件目录添加库文件目录增加与WinPcap有关的预处理定义添加pcap.h头文件添加wpcap.lib库文件编译并运行测试代码添加头文件目录添加头文件目录:ToolsOptionsDerectoriesIncludefiles添加WinPcap开发包中的Include目录26添加库文件目录添加库文件目录:ToolsOptionsDerectoriesLibraryfiles添加WinPcap开发包中的Lib目录27增加与WinPcap有关的预处理定义增加预处理定义:WPCAP和HAVE_REMOTEProjectSettingC/C++Preprocessor28添加pcap.h头文件在使用WinPcap函数的所有源文件中添加pcap.h“#includepcap.h”29添加Wpcap.lib库文件添加wpcap.lib库文件Projectsettinglink加入wpcap.lib30编译并运行测试代码测试代码:(使用PacketDump代码)请根据你所建的工程类型修改这段代码如果建的是MFCApplication,那么请修改printf等函数如果建的是ConsoleApplication,那么可以不用修改31编译并运行测试代码(续)在ConsoleApplication下,运行结果如图所示,这说明环境已经配置成功。32四、用WinPcap捕获数据包33用WinPcap捕获数据包的流程打开网络接口设置过滤器捕获网络数据包释放该设备列表用WinPcap捕获数据包的流程pcap_open_livepcap_setfiliterpcap_next_exMyProcessPacketpcap_dump34pcap_freealldevs打开网络接口35pcap_t*pcap_open_live(constchar*device,intsnaplen,intpromisc,intto_ms,char*ebuf};设置过滤器intpcap_setfilter(pcap_t*p,structbpf_program*fp)36intpcap_compile(pcap_t*p,structbpf_program*fp,char*str,intoptimize,bpf_u_int32netmask)捕获网络数据包37intpcap_next_ex(pcap_t*p,structpcap_pkthdr**pkt_header,u_char**pkt_data};释放该设备列表38voidpcap_freealldevs(pcap_if_t*alldevsp);五、分析数据包39TCP/IP分层体系结构以太网中数据包的封装以太网帧格式IP数据报格式TCP数据报格式字节顺序以太网帧和IP数据报的结构定义例:提取源IP地址和目的IP地址TCP/IP分层体系结构40应用层主机-网络层互联层传输层以太网中数据包的封装41以太网首部互联层首部传输层首部应用层数据以太网尾部互联层首部传输层首部应用层数据传输层首部应用层数据应用层数据Wireshark对数据包各层协议的分析:以太网帧格式目的地址:目的MAC地址6Byte源地址:源MAC地址6Byte类型:表示上层协议类型2Byte0800H:IP0806H:ARP8035H:RARP数据字段:用于携带上层数据长度可变CRC:帧校验字段4Byte42以太网帧格式以下是Wireshark对数据包以太帧头的分析:43IP数据报格式44版本报头长度服务类型03116819标识生存周期协议数据......总长度标志片偏移源IP地址目的IP地址选项+填充头部校验和4}}报头区数据区1:ICMP;6:TCP;17:UDPIP数据报格式以下是Wireshark对数据包的IP数据报头的分析:45TCP数据报格式46TCP数据报格式以下是Wireshark对数据包的TCP数据报头的分析:47以太网帧和IP数据报的结构定义48typedefstructFrameHeader_t{//帧首部BYTEDesMAC[6];//目的地址BYTESrcMAC[6];//源地址WORDFrameType;//帧类型}FrameHeader_t;typedefstructIPHeader_t{//IP首部BYTEVer_HLen;BYTETOS;WORDTotalLen;WORDID;WORDFlag_Segment;BYTETTL;BYTEProtocol;WORDChecksum;ULONGSrcIP;ULONGDstIP;}IPHeader_t;typedefstructData_t{//包含帧首部和IP首部的数据包FrameHeader_tFrameHeader;IPHeader_tIPHeader;}Data_t;六、实验过程中可能遇到的问题多线程给窗口发送消息数据包分片重组嗅探到网页时,汉字的显示问题字节顺序网络序→主机序u_shortntohs(u_shortnetshort)u_longntohl(u_longnetlong)主机序→网络序u_shorthtons(u_shorthostshort)u_longhtonl(u_longhostlong)49例:提取源IP地址和目的IP地址50Data_t*IPPacket;ULONGSourceIP,DestinationIP;……IPPacket=(Data_t*)pkt_data;……SourceIP=ntohl(IPPacket-IPHeader.SrcIP);DestinationIP=ntohl(IPPacket-IPHeader.DstIP);……字节顺序网络序→主机序u_shortntohs(u_shortnetshort)u_longntohl(u_longnetlong)主机序→网络序u_shorthtons(u_shorthostshort)u_longhtonl(u_longhostlong)51七、实验要求52程序要求实验报告要求程序要求重点对TCP、UDP、ARP、IGMP、ICMP等数据包进行分析。建议对其中一种应用层协议着重分析,如http,ftp,……所开发的嗅探工具能够根据协议类型、端口、地址等信息对数据包进行过滤。采用多线程实现。有操作界面,易于使用。单独完成。53实验报告要求在实验报告中写出程序关键算法和流程图根据WinPcap常用库函数总结