首页 利用WinPcap技术捕获数据包

利用WinPcap技术捕获数据包

举报
开通vip

利用WinPcap技术捕获数据包利用WinPcap技术捕获数据包 徐美华 王振旗 韩秀娟 (华北电力大学) :本文通过对WinPcap的结构和功能的介绍,实现如何在windows环境下对网卡进行编程,进行网 络数据包的捕获。 winpcap,包捕获,NDIS,BPF,NPF Data packet capture in Network based on WinPcap Xu Meihua Wang Zhenqi Han Xiujuan (Department of Computer Science and Technology No...

利用WinPcap技术捕获数据包
利用WinPcap技术捕获数据包 徐美华 王振旗 韩秀娟 (华北电力大学) :本文通过对WinPcap的结构和功能的介绍,实现如何在windows环境下对网卡进行编程,进行网 络数据包的捕获。 winpcap,包捕获,NDIS,BPF,NPF Data packet capture in Network based on WinPcap Xu Meihua Wang Zhenqi Han Xiujuan (Department of Computer Science and Technology North of China Electricity Power University BaoDing 071003 xumeiyan123@mail.china.com) Abstract:According to the introduce of architecture and perfermences of WinPcap ,this article discrible how to programme to NIC and capture network-packet in windows. Keywords:WinPcap, packetcapture ,NDIS,BPF,NPF 0前言 随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重 要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术, 只有进行高效的数据包捕获,网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络 安全管理 企业安全管理考核细则加油站安全管理机构环境和安全管理程序安全管理考核细则外来器械及植入物管理 。 1winpcap简介 WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。WinPcap 为用户级的数据包提供了Windows 下的一个平台。WinPcap 是 BPF 模型和 Libpcap 函数库在 Windows 平台下网络数据包捕获和网络状态分析的一种体系结构,这个体系结构是由 一个核心的包过滤驱动程序,一个底层的动态连接库 Packet.dll 和一个高层的独立于系统的函数库 Libpcap 组成。底层的包捕获驱动程序实际为一个 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 网络驱动程序,通过对 NDIS 中函数的调用为 Win95、Win98、WinNT、和 Win2000 提供一类似于 UNIX 系统下 Berkeley Packet Filter 的捕获和发送原始数据包的能力。Packet.dll 是对这个 BPF 驱动程序进行访问的 API 接口,同时它有一套符合 Libpcap 接口(UNIX 下的捕获函数库)的函数库。WinPcap的结构图如图1。 WinPcap 包括三个部分:第一个模块NPF(Netgroup Packet Filter),是一个虚拟设备驱动程序文 件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作 系统特有的代码。第二个模块packet.dll为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。 第三个模块 Wpcap.dll是不依赖于操作系统的。它提供了更加高层、抽象的函数。 packet.dll和Wpcap.dll:packet.dll直接映射了内核的调用。 Wpcap.dll提供了更加友好、功能更加强 大的函数调用。WinPcap的优势提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包 括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。 图1WinPcap结构图 2网络数据包捕获的原理 以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为 监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通 信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得 其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物 理基础。 以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站 点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡) 网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判 断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是 的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。 网卡具有如下的几种工作模式: 1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。 2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同 时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送 帧,而不论它是不是组内成员。 3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。 4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获 程序就是在这种模式下运行的。 网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂 模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕 获的目的。 3在windows情况下捕获数据包的结构 图2捕获数据包的结构图 Wndows下捕获数据包的结构如图2,其中NDIS及其特点是: NDIS(Network Driver Interface Specification) 是 Microsoft 和 3Com 公司联合制定的网络驱动规范,并提供了大量的操作函数。它为上层的协议驱动提供服务,屏蔽了下层各种网卡的差别。NDIS 向 上支持多种网络协议,比如 TCP/IP、NWLink IPX/SPX、NETBEUI 等,向下支持不同厂家生产的多种网卡。NDIS 还支持多种工作模式,支持多处理器,提供一个完备的 NDIS 库(Library)。 但库中所提供的各个函数都是工作在核心模式下的,用户不宜直接操作,这就需要寻找另外的接口。NDIS驱动程序的结构如图3。 4利用winpcap进行网络数据包的捕获和过滤的设计步骤 1)打开网卡,并设为混杂模式。 2)回调函数 Network Tap 在得到监听命令后,从网络设备驱动程序处收集数据包把监听到的数据包负 责传送给过滤程序。 图3NDIS驱动程序结构 3)当 Packet filter 监听到有数据包到达时,NDIS 中间驱动程序首先调用分组驱动程序,该程序将数 据传递给每一个参与进程的分组过滤程序。 4)然后由 Packet filter 过滤程序决定哪些数据包应该丢弃,哪些数据包应该接收,是否需要将接收 到的数据拷贝到相应的应用程序。 5)通过分组过滤器后,将数据未过滤掉的数据包提交给核心缓冲区。然后等待系统缓冲区满后,再将数 据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。 5主要源代码 6)关闭网卡。 根据用 Windows 分组捕获库 WinPcap 提供功能首先要初始化两个结构体,一个是适配器的结构体 LpAdapter, 一个是存放接收到的数据包的结构体 RecvPacket。 使用 Packet.dll 动态连接库编写源代码: #define MAX__LINK__NAME__LENGTH 64 适配器结构: typedef struct__ADAPTER { HANDLE hFile; TCHAR Symboliclink[MAX__LINK__NAME__LENGTH]; Int NumWrites; } ADAPTER , *LPADAPTER; 说明:hFile 是一个指向该网络适配器 Handle 的指针,通过它可以对网络适配器进行操作。symboliclink 包含当前打开的网络适配器的名字。 数据包结构: typedef struct _PACKET { HANDLE hEvent; OVERLAPPED OverLapped; PVOID Buffer; UINT Length; PVOID Next; UINT ulBytesReceived; BOOLEAN bloComplete; //控制接受包的开始和结束 数据包捕获实现的步骤的主要源代码: 1)要获得适配器列表。 #define Max__Num__Adapter 10 //获得适配器列表 char Adapterlist [Max__Num__Adapter[512]] int i=0 char AdapterNames[512], *tempa,*templa; ULONG AdapterLength=1024; } PACKET, *LPPACKET: 2)获得系统中网络适配器的名字。 PacketGetAdapterNames(AdapterNamea,&AdapterLength); tempa=AdapterNamea; templa=Adapternamea; while ((*tempa!=’\0’)??(*tempa-1!=’\0)) { if (*tempa= =’\0’) { memcpy(AdapterList[i],temla,tempa-templa); //内存数据拷贝 templa=tempa+1; i++ } tempa++ } 3)从适配器列表中选择一个默认的 0 号适配器。 LPADAPTER lpAdapter lpAdapter = PacketOpenAdapter (AdapterList[0]); if (!lpAdapter??(lpAdapter->hFile==INVALID__HANDLE__VALUE)) { dwErrorCode=GetLastError(); return FALSE; } 4)将所选择的适配器 lpAdapter 设置为混杂模式。 PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS) 5)设置 BPF 内核中包过滤的过滤器的代参政。利用这个函数右以完成对于原始数据包的初始的过滤处 理,如根据其中端口号、IP 地址等。 PacketSetBpf(LpAdapter AdapterObject,structbpf_program*fp) 6)设置缓冲池为512K字节。 PacketSetBuff(lpAdapter,512000); 7)分配一个数据包对象,并连接已分配的缓冲。 PacketInitPacket(lpPacket,(char*)bufferReceive,512000); 8)捕获多个数据包。从网卡 lpAdapter 接收数据包,并将数据包放入 lpPacket所指向的数据包结构 体中,若接收成功返回 TRUE,否则返回 FALSE。 PacketReceivePacket(lpAdapter,lpPacket,TRUE); 9)通过触发回调函数,把捕获符合过滤器规则的数据包转发给网络协议分析模块进行分析处理。 10) 结束接收数据包,释放数据包对象。 if(lpPacket!=NULL { PacketFreePacket(lpPacket); lpPacket=NULL; } 11)关闭网卡设备,将网卡恢复到正常接收状态。 if(lpAdapter!=NULL { PacketCloseAdapter(lpAdapter); lpAdapter=NULL; } 6结束语 数据包捕获技术是网络管理系统的关键技术,已经按照标题4中的流程进行了简单的实现。如果在 一个繁忙的网络上进行截获,而不设置任何过滤,那得到的数据包是非常多的,可能在一秒钟内得到上 千的数据包。如果应用程序不进行必要的性能优化,那么将会大量的丢失数据包。对捕包性能的优化必 不可少,考虑采用多线程来处理数据包。若在程序中建立一个公共的数据包缓冲池,这个缓冲池是一个 LILO的队列。于是在程序中使用三个线程进行操作:一个线程只进行捕获操作,它将从驱动程序获得的 数据包添加到数据包队列的头部;另一个线程只进行过滤操作,它检查新到的队尾的数据包,检查其是 否满足过滤条件,如果不满足则将其删除出队列;最后一个线程进行数据包处理操作,象根据接收的数 据包发送新数据包这样的工作都由它来进行。考虑尽可能少丢失数据包的条件,应该是进行捕获操作的 线程的优先级最高,这样就可以得到更高的捕包性能。 7参考文献 [1]Optimizing packet capture on symmetric multiprocessing machines. Varenni, G.; Baldi, M.; Degioanni, L.; Risso, F.;Computer Architecture and High Performance Computing, 2003. Proceedings. 15th Symposium on , 10-12 Nov. 2003 Pages:108 – 115. [2]An architecture for high performance network analysis.Risso, F.; Degioanni, L.;Computers and Communications, 2001. Proceedings. Sixth IEEE Symposium on , 3-5 July 2001 .Pages:686 – 693. [3]Synthesis and analysis of fractal LAN traffic at high speeds.Rincon, D.; Martinez, S.; Cano, C.; Sallent, S.;Local and Metropolitan Area Networks, 2004. LANMAN 2004. The 13th IEEE Workshop on , 25-28 April 2004 .Pages:259 – 264. [6]赵心宇,朱齐丹,朱达书.应用winPcap捕获网络数据包. 应用科技,2004,31(11),29~31.[7]吴勇军.用WinS0ck编程捕获局域网上所有IP包.计算机工程与设计,2004,25(5),691~693.[8]李雪莹,刘宝旭,许榕生.基于winPcap的网络监控系统性能优化. 计算机工程, 2004,30(1),8~9.[9]郑啸,魏仰苏.一种新的面向协议测试的包捕获结构.华中科技大学学报:自然科学版,2004,32(7),16~18.
本文档为【利用WinPcap技术捕获数据包】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_637320
暂无简介~
格式:doc
大小:83KB
软件:Word
页数:11
分类:互联网
上传时间:2017-09-26
浏览量:21