欢迎访问binary的Blog   虚心使人进步,骄傲使人落后。

          W3CHINA Blog首页    管理页面    写新日志    退出



«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


登录

用户名称:
登陆密码:
密码保存:


联系我
email: binaryluo(at)gmail.com

我的分类

日志更新

最新评论

留言板

Blog信息

 
blog名称:二进制-虚心使人进步,骄傲使人落后。
日志总数:42
评论数量:370
留言数量:88
访问次数:640076
建立时间:2005年2月19日




[网络编程技术]【原创】Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

binaryluo 发表于 2006/2/10 23:03:37

Winpcap的内部结构 这是引自winpcap主页上的一句话: WinPcap is an architecture for packet capture and network analysis for the Win32 platforms. It includes a kernel-level packet filter, a low-level dynamic link library (packet.dll), and a high-level and system-independent library (wpcap.dll). 我解释为:Winpcap是针对Win32平台上的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不以来于系统的库(wpcap.dll)。     为什么使用“architecture”而不是“library”呢?因为抓包是一个要求与网络适配器(网卡)和操作系统交互的底层机制,而且与网络的实施也有密切关系,所以仅用“library”不能充分表达Winpcap的作用。 下图表明了Winpcap的各个组成部分: 500)this.width=500'> Winpcap的主要组成部分     首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(raw packet),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(system dependent)的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(Netgroup Packet Filter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的ftp通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。     其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库(capture primitives)。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。 NPF驱动 网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。 1.  NPF和NDIS         NDIS(Network Driver Interface Specification)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如TCP/IP的实现)之间通信的规范。NDIS最主要的目的是作为一个允许协议驱动发送和接收网络(LAN或WAN)上的数据包而不必关心特定的适配器或特定的Win32操作系统的封装。 NDIS支持三种类型的网络驱动: (1)       网络接口卡或NIC驱动(Network interface card or NIC drivers)。NIC驱动直接管理着网络接口卡(NIC)。NIC驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置NIC,停止NIC,查询和设置驱动的运行特征。NIC驱动可以是小端口(miniport)或完全的NIC驱动(full NIC driver)。 l         Miniport驱动仅仅实现了管理NIC的必要操作,包括在NIC上发送和接收数据。对于所有最底层的NIC驱动的操作由NDIS提供,例如同步(synchronization)。小端口(miniport)不直接调用操作系统函数,它们对于操作系统的接口是NDIS。 小端口仅仅是向上传递数据包给NDIS并且NDIS确保这些数据包被传递给正确的协议。 l         完全NIC驱动(Full NIC driver)完成硬件细节的操作和所有由NDIS完成的同步和查询操作。例如,完全NIC驱动维持接收到的数据的绑定信息。 (2)       中间层驱动(Intermediate drivers)中间层驱动位于高层驱动(例如协议驱动)和小端口之间。对于高层驱动,中间层驱动看起来像是小端口;对于小端口,中间层驱动看起来像协议驱动。一个中间层协议驱动可以位于另一个中间层驱动之上,尽管这种分层可能对系统性能带来负面影响。开发中间层驱动的一个关键原因是在现存的遗留协议驱动(legacy protocol driver)和小端口之间形成媒体的转化。例如,中间层驱动可以将LAN协议转换成ATM协议。中间层驱动不能与用户模式的应用程序通信,但可以与其他的NDIS驱动通信。 (3)       传输驱动或协议驱动(Transport drivers or protocol drivers)协议驱动实现了网络协议栈,例如IPX/SPX或TCP/IP,在一个或多个网络接口卡上提供它的服务。在协议驱动的上面,它为应用层客户程序服务;在它的下面,它与一个或多个NIC驱动或中间层NDIS驱动连接。         NPF是一个协议驱动。从性能方面来看,这不是最好的选择,但是它合理地独立于MAC层并且有权使用原始通信(raw traffic)。 下图表现了NPF在NDIS栈中的位置: 500)this.width=500'> 图1        NDIS中的NPF   2.  NPF结构基础 下图表现了伴随着NPF驱动细节的Winpcap的结构。  500)this.width=500'> 图2        NPF设备驱动  NPF可以完成许多不同的操作:抓包(capture)、监视(monitoring)、转储到硬盘(dump to disk)、数据包发送(packet injection)。下面将简要介绍这些操作。 抓包 抓包是NPF最重要的操作。在抓包的时候,驱动使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。 抓包过程依赖于两个主要组件: l         一个数据包过滤器,它决定着是否接收进来的数据包并把数据包拷贝给监听程序。数据包过滤器是一个有布尔输出的函数。如果函数值是true,抓包驱动拷贝数据包给应用程序;如果是false,数据包将被丢弃。NPF数据包过滤器更复杂一些,因为它不仅决定数据包是否应该被保存,而且还得决定要保存的字节数。被NPF驱动采用的过滤系统来源于BSD Packet Filter(BPF),一个虚拟处理器可以执行伪汇编书写的用户级过滤程序。应用程序采用用户定义的过滤器并使用wpcap.dll将它们编译进BPF程序。然后,应用程序使用BIOCSETF IOCTL写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将被执行,而满足条件的数据包将被接收。与传统解决方案不同,NPF不解释(interpret)过滤器,而是执行(execute)它。由于性能的原因,在使用过滤器前,NPF提供一个JIT编译器将它转化成本地的80x86函数。当一个数据包被捕获,NPF调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。 l         一个循环缓冲区,用来保存数据包并且避免丢失。一个保存在缓冲区中的数据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小,但它不是协议头。此外,以队列插入的方式来保存数据包可以提高数据的存储效率。可以以组的方式将数据包从NPF缓冲区拷贝到应用程序。这样就提高了性能,因为它降低了读的次数。如果一个数据包到来的时候缓冲区已经满了,那么该数据包将被丢弃,因此就发生了丢包。无论是核心态还是用户态的缓冲区都可以在运行时被改变以达到最佳性能:packet.dll和wpcap.dll提供了实现该目的的函数。 


阅读全文(20304) | 回复(19) | 编辑 | 精华
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

basten(游客)发表评论于2007/5/10 22:12:29

好东西, 一年多以后才看到这篇文章, 真惭愧!! 


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

binaryluo发表评论于2006/4/9 20:26:03

以下引用gdxnfx(游客)在2006-4-9 16:07:00的评论:http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator could u tell me how to use this software?it run with environment of "WinPcap Library",above is the link for it .thx! my mail: gdxnfx@tom.comFirst,you should download the winpcap driver and winpcap lib file from winpcap official site.You can find the download url in the first one of this series articles. Second,setup the winpcap driver on your machine. Third,configure the related environment variable.I use VC++ 6.0. The first thing is you should add the lib directory path and include directory path in the VC++ 6.0.You could do this at Tools->Options->Directories.Next,if you create a new winpcap project,you should add 'WPCAP' at Project->settings->C/C++->Preprocessor definitions box,and then you should add 'wpcap.lib' and 'Packet.lib' at Project->setting->Link->Object/library modules box. Now,you can compile your program and run it if it has no error. P.S.you could get the detail of winpcap lib function from winpcap API document.  

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

gdxnfx(游客)发表评论于2006/4/9 16:07:00

http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator could u tell me how to use this software?it run with environment of "WinPcap Library",above is the link for it .thx! my mail: gdxnfx@tom.com 

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

binaryluo发表评论于2006/3/27 11:05:08

以下引用realfx在2006-3-21 15:35:46的评论:Q1:winpcap实质上是个协议驱动的话 ,那也就是说用他发或收的包仍然会被基于中间层抓包的防火墙截获?因为中间层比协议驱动更底层 Q2:作为一个协议驱动 就是说他也符合ndis,那么他的注册以及功能是不是也是调用ndis函数?eg:ndisregisterprotocol 如果是的话 那么他发送或接受的包也会被基于ndis hook的防火墙截获? sls21@126.com qq:12679352我已在留言板里回复你了。 

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

real发表评论于2006/3/21 15:35:46

Q1:winpcap实质上是个协议驱动的话 ,那也就是说用他发或收的包仍然会被基于中间层抓包的防火墙截获?因为中间层比协议驱动更底层 Q2:作为一个协议驱动 就是说他也符合ndis,那么他的注册以及功能是不是也是调用ndis函数?eg:ndisregisterprotocol 如果是的话 那么他发送或接受的包也会被基于ndis hook的防火墙截获? sls21@126.com qq:12679352 

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Winpcap学习:第七天(20060209)(未完成)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

binaryluo发表评论于2006/3/13 21:39:43

以下引用lgzxz999(游客)在2006-3-13 18:40:45的评论:事件类型: 错误事件来源: Service Control Manager事件种类: 无事件 ID: 7000日期:  2006-3-13事件:  18:12:30用户:  N/A计算机: FAMILY描述:由于下列错误,Netgroup Packet Filter 服务启动失败: 系统找不到指定的文件。 有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。请问:这个问题在这能不能解决~!!!谢谢这个是windows的错误,你到微软主页上搜索栏里输入错误号看看相关的文章,也许对你有帮助。 

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 2 3 4 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144763835 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号