关于解决应用层提取NDIS驱动数据包丢包的方案,通过event加共享内存实现

关于解决应用层提取NDIS驱动数据包丢包的方案,通过event加共享内存实现 
截获的网络封包,很多时候都需要将包的信息或者是包的内容通过win32层显示出来,很多人想到的方法是event加IOCTL,不过这样很容易产生丢包的问题,因为网络接受发送数据包的速度原比event 和 IOCTL的速度要快,也就是说当一个event发到win32层时,win32层通过DeviceIoControl得到数据的时候,原来自己预先定义的缓冲区已经被覆盖了多少遍了。

(解决方法很简单,没必要写出来,只不过以前我初学的时候靠自己鼓捣出来的,就连代码都贴这里了,现在看来很傻就想删掉,不丢人现眼了,但是要删的时候还是发现最近的来源里还有人搜索关于丢包的,干脆把代码删除掉,思路重新写一些吧。)

大概是这个样子的,首先驱动自己创建一个队列用于存放获取到的数据包,加锁访问该队列保证同步。同时刚才说的event机制保留住,每次ring3获得event信号的时候下来访问队列,一直访问到队列为空才返回,继续等待信号,如此反复,个人机器上没问题的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  对于在“蓝网之家”影响下蠢蠢而动搞 Windows 95 远程启动的朋友可能不少,那么大家一定对 NDIS 这几个字母不会感到陌生。其实不只是在远程启动这一层,只要是网卡的驱动盘,大家都会在里面发现有类似 NDIS、NDIS2、NDIS3、NDIS4一样的目录,只是大家在 Windows 9x 或 NT 中安装、设置网卡时没有注意到它罢了。但即使大搞特搞 RPL 的朋友对其大概也是只知其然而不其所以然。    NDIS 是什么?有什么作用?       NDIS 的全称是 Network Device Interface Specification,中文意思就是网络设备接口规范。    根据 OSI 七层模型,物理层定义了对网卡、线缆以及其它物理硬件设备进行配置的标准。节点间建立通信时是由物理层在传输介质上传送二进制信息实现的,因此,在发送端和接收端都还必须有一个程序来格式化这种信息流并将其传送给上一层。NDIS 的作用就是避免在访问网卡每次进行传输时都编写相应的代码。由此说来,NDIS 本质上是一种软件接口,有了 NDIS ,所有的传输就可以采用一种通用的方式来访问由不同厂商制造的网卡了,即它是用来连接协议堆栈和网卡的。   与此相关的软件还有重定向器(Redirector)和服务器(Server)。前者的目的是截获来自 OSI 会话层的网络调用,并通过将其传送到相应的协议驱动程序接口而格式化成 NDIS 能够识别和使用的命令。后者则负责接收从重向器传过来的来自于远程计算机的请求,再将这一请求传送给相应的本地文件系统驱动程序,最后再由该“服务器”将数据沿协议堆栈向下传递给客户机。    TCP协议也是通过调用 NDIS 接口服务来完成传输操作的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值