编写NDIS驱动,完全控制网卡收发报文
来源:互联网 发布:淘宝客商品编辑软件 编辑:程序博客网 时间:2024/04/29 09:06
在windows上面,利用网卡做自定义报文的收发,Winpcap是唯一选择,目前自己编写驱动来实现相关功能的基本找不到。
Winpcap对于接收的报文只是复制,并不阻断报文向操作系统提交,因此还是影响了操作系统,导致操作系统时不时的发出一些报文来,而这些报文又可能会干扰我们的测试过程,为了突破这个限制,我重新实现了相关的驱动,做到了以下几个功能:
1 和Winpcap一样出色的报文接收和发送功能。函数接口类似,原来的代码不用大修改。
2 接收后的报文不会转交到操作系统。
3 操作系统发出的报文会被无情的丢弃。
4 应用层所有功能封装成一个DLL,直接控制某个网卡调用相关接口函数即可。
5 应用层收到的数据也能够保存为pcap文件格式,这样便于使用wireshark来分析报文。
6 带接收缓冲功能,防止应用层处理不及时而造成丢包。
通过这个驱动,被我们控制的网卡相当于从操作系统中脱离,完全被我们控制,这就成了一个收发包的设备了,可以用于报文测试模拟了,而软件模拟的成本比硬件成本低很多,如果我们实现了一个比较好的软件,那么可以节省很多购买测试设备的钱。华为的Tesgine都是可以被部分替换的。当然,软件开发的成本也不小,需要对各种报文有经验的开发人员,另外,网卡的吞吐率只有1G,和仪器设备无法比,需要多个网卡的配合。但还是有很多这方面的需求的。
我们编写自定义驱动,当然不需要重头开始,windows的DDK中已经提供了样例,其中,windowsXP版本,可以看WinDDK\7600.16385.1\src\network\ndis\passthru这个例子,采用NDIS5,如果是Win7的话,需要采用WinDDK\7600.16385.1\src\network\ndis\filter这个例子,这是基于NDIS6的。在没有NDIS开发经验之前,这几个例子都相当的难懂,在有了经验之后,发现这又是情理之中的代码,一步一步按照微软的驱动往下走即可。这两个例子,都提供了报文阻断的实现,但没有提供和应用层交互的代码,也没有实现发送报文的代码,因此,需要在这两个例子上,扩充出OpenFile,ReadFile,WriteFile,DeviceIOControl等相关的功能,并做好数据的缓冲拷贝机制。对于这部分代码,可以参考winpcap的驱动实现过程。
由于代码算公司的成果,这里就不贴出来了。
- 编写NDIS驱动,完全控制网卡收发报文
- NDIS LWF收发3G网卡Mobile Broadband的自定义数据
- 网卡驱动编写方法
- 网卡驱动之虚拟网卡驱动编写
- 网卡驱动之虚拟网卡驱动编写
- linux驱动之网卡驱动-虚拟网卡驱动编写
- Linux内核分析 - 网络[二]:网卡驱动接收报文
- Linux内核分析 - 网络[二]:网卡驱动接收报文
- Linux内核分析 - 网络[二]:网卡驱动接收报文
- Linux内核分析 - 网络[二]:网卡驱动接收报文
- HttpURLConnection 收发报文
- NDIS 中间层驱动开发
- NDIS驱动学习笔记
- NDIS驱动学习笔记
- NDIS驱动结构
- ndis协议驱动开发
- 编写Linux网卡设备驱动(下)
- 编写Linux网卡设备驱动(下) .
- Runjar jarFile [mainClass] args...
- 工厂模式
- android之activity间传输数据
- Android
- CERT最近发布了Android平台上Java应用的安全编程指南
- 编写NDIS驱动,完全控制网卡收发报文
- Windows程序设计问题记录
- 简单实用的按键去抖Verilog实现
- JNI学习笔记——字符串操作
- 黑马程序员——集合
- linux--函数劫持--基于LD_PRELOAD
- Verilog HDL按键消抖
- Illegal attempt to associate a collection with two open sessions;
- Leetcode 贪心 Best Time to Buy and Sell Stock III