基于Windows系统下网络数据包过滤方法的分析

 

 

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原型就清楚了。

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、、、、

int sockRaw = socket(AF_NET, SOCK_RAW, IP_PROTO_RAW);

这样就创建了一个Raw Socket.。

 

结论:

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


 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文章将介绍如何使用RawSocket(原始套接字)开发网络嗅探器: 首先我们得了解什么是套接字,这个我就不多说,自己百度,百度百科比我说的好。 那么什么又是原始套接字呢,常用的套接字分为 SOCK_STREAM(流套接字) 用于TCPXY通讯。 SOCK_DGRAM(数据报套接字) 同于UDPXY通讯。 那么原始呢,他则是和名字一样原始套接字;举例:要想用流套接字进行一次TCP的发包,那么直接连接上对方服务器然后用Send就可以发送指定的内容,但其实发送的数据并不止你的那些内容,有一些东西是流套接字会给你自动补上的。TCP是属于IPXY的一个子XY,那么要发送一个TCP数据包就得加上(以太网XY报头这个先不提),IPXY的报头,和TCPXY报头,这些东西流套接字都会帮你处理,而原始套接字则不会(当然也可以设置让原始套接字构造IP报头)。原始套接字他有更多的用途,但相对来说也比流套接字或数据报套接字麻烦。 原始套接字还可以设置成允许接收本地所有的套接字数据。那么我们就利用这个功能来做嗅探器! 首先:1.使用  WSAStartup (合并短整数 (2, 2), WSADATA)  来初始化Winsocket服务 其参数有2个  第一个 (短整数型/双字节型):wVersionRequired  这个参数表明使用的winsock版本号,高位指定修订版本号,低位指定主版本号。第二个参数 WSADATA类型 用于接收Winsocket细节东西,咱不用管它。 //下面就不说那么详细了,源码里面全是注释,自己看。 2.然后使用socket (#AF_INET, #SOCK_RAW, #IPPROTO_IP)  来创建一个套接字   第一个参数应该是表明Internet地址格式反正只能固定这个,仅仅支持这个  参数2:表明要创建的是一个原始套接字,参数3:指定IPXY  IPXY包括其子XY TCP UDP 等。成功返回套接字句柄 3.  bind (s, addr, sizeof (addr))  将套接字绑定至指定网卡,参数1=套接字句柄    参数2为一个addr结构的值,该值表明要绑定的网卡IP及端口号 4.  ioctlsocket (Socket, 2550136833, 1) 将套接字的模式改变为允许接收所有数据 顺利完成上面的操作后咱就可以用Recv来接收数据包了,只要不断的调用Recv就OK。
### 回答1: 《Wireshark数据包分析实战 第2版》是一本关于使用Wireshark软件进行网络数据包分析的实用指南。Wireshark是一款自由和开源的数据包分析软件,可以在Windows、Linux、macOS等操作系统上运行。 这本书的第2版是在第1版的基础上进行了更新和改进。它提供了一系列的实战案例,用于帮助读者快速入门并掌握Wireshark的使用技巧。通过实例,读者可以了解如何捕获、过滤分析和解释网络数据包,并通过对数据包分析,深入了解网络通信的原理和过程。 本书从基础知识开始介绍:如何安装、配置和使用Wireshark软件,以及网络协议的工作原理和常见的网络攻击手法。然后,逐步引导读者进行数据包的捕获和分析,包括如何过滤和重组数据包、查找和解决网络故障,并对网络性能进行评估和优化等等。同时,每个案例都提供了详细的分析方法和步骤,以及对相关协议和网络技术的解释和理解。 《Wireshark数据包分析实战 第2版》适用于想要学习和使用Wireshark进行网络数据包分析网络管理员、安全工程师、网络工程师以及对网络通信和安全感兴趣的读者。它不仅给读者提供了实际的操作指导,还提供了广泛的实例和案例,有助于读者理解和应用所学知识。无论是新手还是有经验的网络专业人士,都可以从这本书中获得实用的技巧和知识,提高自己的网络分析能力。 ### 回答2: 《Wireshark数据包分析实战 第2版》是一本关于Wireshark数据包分析的实战指南。该书由Wireshark的作者和维护者Laura Chappell撰写,系统地介绍了如何使用Wireshark工具来分析网络数据包。 该书分为13章,从Wireshark的基本概念和安装开始,逐步深入讲解了数据包的抓取、过滤分析。每一章都有详细的步骤和示例,帮助读者快速上手并深入理解Wireshark的使用。 《Wireshark数据包分析实战 第2版》的重点是教授读者如何利用Wireshark工具来解决实际网络问题。书中涵盖了常见的网络协议和应用层协议,如TCP/IP、HTTP、DNS、FTP等,并详细介绍了它们的数据包格式和分析方法。同时,书中还介绍了一些高级的数据包分析技术,如流量分析、错误和攻击检测等。 此外,书中还提供了一些实际案例和挑战,读者可以通过解决这些案例来锻炼自己的分析能力。书中的示例和实战案例都是基于真实的网络流量,读者可以直接应用到实际工作中。 总的来说,《Wireshark数据包分析实战 第2版》是一本实用的Wireshark入门书籍,适合那些希望通过数据包分析来解决网络问题的读者。无论是网络工程师、安全分析师还是对网络数据包感兴趣的人,都可以从中获得有价值的知识。 ### 回答3: 《Wireshark数据包分析实战 第2版》是一本关于Wireshark数据包分析工具的实战指南。该书由吉克(Giacomo Bernardi)和拉纳(Laura Chappell)合著。这本书是第二版,比第一版更加全面和深入。 Wireshark是一款开源的网络封包分析软件,可用于捕获和分析网络数据包。它可以帮助网络管理员和安全专家分析网络流量,查找问题和故障,并进行安全审计。 本书首先介绍了Wireshark的基本操作和常用的过滤和显示技巧。然后,它深入讲解了各种协议,包括以太网、IP、TCP、UDP、HTTP、DNS等,以及使用Wireshark进行HTTP和DNS分析方法。 此外,论述了使用Wireshark进行流量分析网络故障排查、网络性能优化和安全审计的高级技术。它还包括一些案例研究和实战场景,帮助读者理解如何应用Wireshark进行实际的网络分析工作。 本书的特点包括: 1. 综合性:全面覆盖了Wireshark的各个方面,从基础入门到高级应用,适合初学者和有经验的分析师使用。 2. 实战导向:书中有大量实例和演示,可以帮助读者更好地理解和应用所学的知识。 3. 详细说明:作者详细讲解了如何设置和操作Wireshark,并提供了许多实际的操作示例。 总之,《Wireshark数据包分析实战 第2版》是一本全面介绍Wireshark网络分析工具的实战指南。无论您是网络管理员、安全专家还是对网络分析感兴趣的读者,本书都会为您提供很大的帮助。如果您想更深入地了解网络数据包分析,这本书是一个不可多得的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值