`
zxxSsdsd
  • 浏览: 9704 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

过滤报文的几种方式

 
阅读更多
1、windows的分层网络构架
可以把windows操作系统的网络构架粗略划分为6层,其中逻辑链路层、网络层和传输层都是通过传输驱动程序实现的,也叫做协议驱动程序。网络驱动接口标准(NDIS)用于windows环境下网络驱动程序的开发,NDIS提供了很多功能函数,在各种驱动程序的编写中只需要调用各种函数,NDIS负责把上下层驱动程序联系起来,实现网络数据包的上下发送与接收。

例如,当协议驱动程序分配包,从应用程序中将数据拷贝到包中,并且通过调用NDIS函数将这些包发送到底层驱动程序中。协议驱动程序也为从下层驱动程序中接收包提供了接口,协议驱动程序将接收到的数据包转换成相应的客户应用程序。

2、网络数据包的过滤方法
2.1 基于NDIS包拦截技术
数据包的拦截技术,其中最多的是编写IM Driver在DDIS中间层对Min Port(网卡驱动程序)和协议驱动程序之间的数据包进行拦截,这是微软提供的一种技术。

中间层驱动程序,由于其特殊的位置,使得它既能与上层协议驱动进行通信又能与下层端口驱动程序通信。当接收来自上下层的数据包时,中间驱动程序需要MinPortSend、ProtocolTeceive、MinportSendPacket、protocolReceivePacket、MinportTransferData进程来完成数据的传输。

下面再介绍一种更有效的基于NDIS包拦截方法,NDIS协议驱动程序是通过填写一张NDIS_PROTOCOL_CHARACTERISTICS的表,并调用NDIS API函数NdisRegister Protocol进行注册。现在关注一下NDIS_PROTOCOL_CHARACTERISTICS这张表,这张表中存有所有协议驱动程序与底层的派发函数的入口,如SendHandler、ReceiveHandler、BindAdapterHandler等。

当网卡有数据包进入时,会通过表中的ReceiveHandler或ReceivePacketHandler通知协议驱动程序有一个该协议的数据包进入,反之协议驱动程序是通过SendHandler或SendPacketsHandler函数向网卡驱动发送数据包到网络上去的,通过NDIS.h的头文件知道通过这个表中的SendHandler或SendPacketsHandler发送的,只要将每一个协议程序所填写的NDIS_Protocol_characteristics表里的派发函数指向自己的函数,就能成功的对数据包进行拦截。

看下面的NdisRegisterProtocol原型就清楚了。

[cpp] view plaincopyprint?
01.NdisRegisterProtocol(OUT PNDIS_STATUS Status,OUT PNDIS_PROTOCOL_BLOCK NdisProtocolHandle,IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,IN U INT CharacteristicsLength); 
NdisRegisterProtocol(OUT PNDIS_STATUS Status,OUT PNDIS_PROTOCOL_BLOCK NdisProtocolHandle,IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,IN U INT CharacteristicsLength);


如果查询成功,返回一个非零值。

2.2   基于WinPcap抓报的过滤方法
winpcap(windows packet capture)核心功能是捕获网络数据包,其中NPF是一个虚拟设备驱动程序文件,它的功能是过滤数据包,并把这些数据包原封不懂地传给用户态模块,如下图:



图中箭头方向表示网络数据包的流动方向,NPF工作在内核层,它从网卡驱动程序收集网络数据包,

既可以发送过滤部件,对网络数据包进行过滤;

也可以发送给统计部件,对网络进行统计分析;

还可以发送给存储部件,把网络数据包直接存储到磁盘。

winpcap的优势:提供了一套标准的抓包接口,与Libpacp兼容,可使得原来许多Unix平台下的网络分析工具快速移植过来,便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。



2.3   传输层过滤驱动程序
挂接到TCP/IP协议驱动程序上对TCP协议做过滤的驱动程序,工作在传输层,将本身作为过滤驱动程序挂接到其他驱动程序上 并截获IRP请求及进行IRP请求的转发,从而能够实现网络数据包的截获与过滤功能,挂接到TCP/IP的驱动程序前后对照如图:



可以用IoAttachDeviceToDeviceStack或IoAttachDevice函数将过滤驱动依附到TCP或UDP设备上,就可以在IRP的处理过程中得到相应的网络数据,并且可以根据需要进行过滤。

2.4   实用Filter-hook驱动程序
filter-hook驱动程序是一个用于过滤网络数据包的内核驱动程序,它扩展了系统支持的IP过滤驱动程序的功能,并且仅能安装在WIN2000及以后的版本中,在系统中Filter-hook驱动程序仅能有一个实例被IP过滤驱动程序使用,由于它向IP过滤驱动程序注册自己,因此它运行时需要先加载IP过滤驱动程序,即  ipfltdrv.sys

filter-hook驱动程序向IP过滤驱动程序注册回调函数,当发送或接收每一个IP数据包时,IP过滤驱动程序将调用这个函数,这样就可以说在函数中对IP数据进行修改或者过滤。

2.5   采用RAW winsock
windows系统提供的winsock2增加了许多新特性,winsock2允许程序使用WSA Toctl给一个Sock_RAW类型的socket Rcvall属性,这样socket就可以收到所有经过本机的数据了,因此可以利用socket编写接口,绕过复杂的NDIS驱动程序设计,来达到接收网络数据包的目的。首先,调用WSA socket函数建立SOCK_RAW套接字,并指定网络协议类型为IP,然后得到当前网卡设置的IP地址与建立的套接字绑定,在设置接受属性好就可以接收数据了。

Raw Socket:原始套接字
可以用它来发送和接收IP层以下的原始数据包,如ICMP、TCP、UDP、、、、

[cpp] view plaincopyprint?
01.int sockRaw = socket(AF_NET, SOCK_RAW, IP_PROTO_RAW); 
int sockRaw = socket(AF_NET, SOCK_RAW, IP_PROTO_RAW);这样就创建了一个Raw Socket.。



结论:
由于windows系统的网络结构是分层,根据过滤数据包的目的不同,可以在不同层次进行网络数据包拦截,上面讲解的几种方法有的需要专门的驱动程序编写知识,有一定难度,但是可以修改驱动程序达到自己的目的,甚至可以修改数据再将其转发。
分享到:
评论

相关推荐

    报文分析软件,分析通讯规约报文的东东

    报文分析通常涉及到以下几个关键知识点: 1. **通信协议**:报文分析软件的基础是对各种通信协议的理解,如TCP/IP(Transmission Control Protocol/Internet Protocol)、UDP(User Datagram Protocol)、HTTP...

    icmp报文类型说明

    根据RFC792及后续更新文档的规定,ICMP报文主要有以下几种类型: 1. **应答(Echo Reply,类型0)**: - 作为对回应请求(Echo Request)的响应,通常用于ping命令。 2. **目的无法到达(Destination ...

    DHCP报文格式和抓包分析

    例如,在使用Wireshark抓取DHCP报文时,可以通过过滤器`dhcp`或`bootp`来筛选出所有DHCP相关的报文。此外,还可以查看每个字段的具体值,深入理解DHCP的工作流程。 #### 五、总结 DHCP报文格式及其抓包分析对于...

    报文监控Monitor

    在电力行业中,报文监控(Monitor)是一种至关重要的工具,它用于实时监控和分析系统中的数据通信报文,确保电力系统的稳定运行。报文监控软件是这类应用的核心,它能够帮助工程师们检测、记录和诊断电力系统中的...

    图文描述一个报文的路由器之旅(V1.0)神奇

    4. **包过滤**:根据一系列规则,允许或拒绝报文通过。 5. **策略路由**:改变报文的默认路由路径。 #### 特定协议报文处理 路由器还需要处理特定协议的报文。例如: 1. **IP单播转发流程**:涉及IPv4和IPv6的单...

    华为告诉你一个报文的路由器之旅

    包过滤是一种安全措施,用于阻止不符合规则的报文通过路由器。这通常通过设置ACL(Access Control List)来实现。 ##### 6.5 策略路由(重定向) 策略路由允许管理员根据特定条件(如源地址、目的地址等)来指定...

    MPCP OAM报文分析总结

    - **方式2**:设置几个参数,如Gate_tx(OLT发送normal gate的次数)、Gate_Num(最大发送次数)、GateTime(两次normal gate之间的时间间隔)。这些参数的设定确保了在一定时间内至少有一次发送normal gate的机会...

    vs2010 mfc ARP报文发送

    ARP报文包含以下几个字段: 1. 操作类型:请求(1)或应答(2)。 2. 发送方硬件地址:发送ARP报文的设备的物理地址。 3. 发送方IP地址:发送ARP报文的设备的IP地址。 4. 目标硬件地址:空(在请求中)或目标设备的...

    基于FPGA实现的报文分类智能网卡.pdf

    基于FPGA(现场可编程门阵列)实现的报文分类智能网卡是一种结合了硬件加速技术与传统网络通讯技术的新型网络接口设备。它旨在解决传统网络安全应用软件处理网络数据时面临的效率问题,通过将报文分类与过滤功能下沉...

    利用wpcap捕获报文并分析报文流量

    在IT领域,网络报文捕获(Packet Capture)是一种常用的技术,用于监控和分析网络通信。其中,`wpcap`是Windows平台上的一个开源库,由Libpcap项目发展而来,它为开发者提供了捕获、过滤、分析网络数据包的能力。本...

    Java如何处理ICMP报文的收发

    通过上述示例代码可以看出,使用Jpcap库发送ICMP报文的过程主要包括以下几个步骤: 1. **获取网络设备列表**:通过`JpcapCaptor.getDeviceList()`方法获取系统中所有可用的网络设备。 2. **打开设备并设置过滤器**...

    GPS过滤算法.txt

    根据提供的文件信息,我们可以深入探讨GPS(全球定位系统)中的速度计算、精度评估以及历史位置数据处理等几个关键算法。 ### GPS速度计算 在GPS应用中,速度是至关重要的参数之一,它对于导航、追踪等功能至关...

    TestCenter过滤器的使用

    过滤器是一种条件表达式,由不同的字段和运算符组成,用于匹配数据流中的特定信息。例如,我们可以设定过滤器来捕获特定IP地址(如192.168.1.10)的报文,或者只显示具有特定差分服务代码点(DSCP)值(如56,对应...

    网络原理实验报告(分析IP报文结构)

    一个标准的IPv4数据包主要包括以下几个部分: - **版本**(Version):占用4位,表示IP协议的版本号,在IPv4中为4。 - **头部长度**(Header Length):占用4位,表示IP数据报头部的长度,单位为32位字。 - **服务...

    TCP UDP抓包 发送TCP UDP报文

    Wireshark,前身为Ethereal,是一款跨平台的图形化抓包工具,提供强大的过滤、解码和分析功能,支持多种网络协议,包括TCP和UDP。用户可以通过它查看网络流量,检查数据包内容,分析通信错误,或者进行性能测试。 ...

    CAN分析仪、CANopen报文资料

    2. 设置滤波器:根据需要,可以配置分析仪过滤特定的CAN ID,只显示相关报文,以便于集中关注。 3. 数据捕获:开启数据记录,分析仪将捕获并显示总线上发送的所有报文。 4. 报文解析:分析仪会解码报文内容,显示其...

    行业分类-设备装置-HTTP报文的重写方法及装置.zip

    5. 安全与隐私保护:通过重写报文,可以实现对敏感信息的过滤或替换,如去除或加密Cookie,防止中间人攻击。 6. 性能优化:比如通过GZIP压缩响应内容,减少网络传输的数据量。 7. 日志记录:为了监控和分析网络...

    论文研究-一种基于深度报文检测的心跳包问题解决方案 .pdf

    1. 深度报文检测(Deep Packet Inspection, DPI):这是一种数据包过滤技术,能够对数据包的全部内容进行检查和分析,而不仅仅是检查数据包的头部信息。DPI可以详细检查数据包的有效载荷,以执行内容过滤、病毒扫描...

Global site tag (gtag.js) - Google Analytics