分享
 
 
 

NDIS

王朝百科·作者佚名  2010-02-17
窄屏简体版  字體: |||超大  

NDIS是Network Driver Interface Specification,即网络驱动接口规范。NDIS的主要目的就 是为NIC(网络接口卡,Netwok Interface Cards)制定出标准的API接口。MAC(介质访问控制,Media Access Controller)设备驱动封装了所有的NIC硬件 实现,这样一来所有的使用相同介质的NIC就可以通过通用的编程接口被访问。 NDIS同时也提供一个函数库(又时也称作wrapper),这个库中的函数可以被MAC驱动调用,也可以被高层的协议(例如TCP/IP)驱动调用。这些wrapper函数使得MAC驱动和协议驱动的开发变得更加容易。同时,这些wrapper函数也减 少了驱动程序对工作平台的依赖性。

NDIS(NetworkDriverInterfaceSpecification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。

NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

NDIS支持三种类型的网络驱动程序:

网卡驱动程序(NICdrivers):网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。

中间驱动程序(Intermediateprotocoldrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。

协议驱动程序(Upperlevelprotocoldrivers):协议驱动程序执行具体的网络协议,如IPX/SPX、TCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动程序的信息。

我们开发的防火墙采用的是中间驱动程序。

中间驱动程序在协议驱动程序和小型端口驱动程序之间插了一层,使得来自上层的发送包和来自网络的接收包都必须经过它而进行传递,从而可以用来拦截较为底层的网络数据包,在此基础上进行过滤、加密、压缩、网络地址转换等操作。由于中间驱动程序实际上不是从最下层直接截获的比特流,而是经过了NDIS,所以实际的包没有了CRC(循环冗余校验码),这部分已经被NDIS过滤掉了。基于这个原因,可以说中间驱动程序的大概位置是在数据链路层和网络层之间。中间驱动程序在数据链路层和网络层之间对所有的数据包进行

检查,功能强大,但编程接口比较复杂。

基于IMD包过滤防火墙系统总体框架:

(1)基于IMD的包过滤驱动程序PFilter.SYS

位于核心态,运行效率高,主要用于在NDIS中间驱动程序中拦截所有的网络数据包,根据过滤规则判别是否接收或发送数据包。同时处理上层应用程序发送的IRP,可以将数据包直接传送到应用程序、设置网卡的工作模式等。

(2)应用层的网络监控与防火墙软件Firewall.EXE。

负责提供用户界面,为用户提供方便的服务,选择底层包过滤驱动程序监控网卡,读取和过滤数据包,支持对常见协议和地址的过滤设置,用树状视图有层次地显示以太数据帧的解码信息,以十六进制的形式显示整个数据包的数据转储,对捕获到的数据包的存储和加载等。

500){this.resized=true;this.style.width=500;}" border=0>

包过滤驱动程序以虚拟网络设备驱动程序的方式“楔入”操作系统的协议堆栈,能截获所有进出系统的网络数据包,从而解决数据包过滤的核心问题。

此次驱动程序的开发主要基于Windows 2000 DDK中的NDIS中间驱动程序例程Passthru,以此为框架进行编程,在此基础上通过改写接收和发送包函数、增加与用户态应用程序通信等功能去实现。驱动程序在核心态具备设置、请求传递、包截获和包管理等有效手段,向上可以通过系统为设备I/O提供的统一界面与用户态应用交互。

当应用层程序要发送数据时,不是直接将数据包发送给NdisSend函数,而是先发送给包过滤驱动程序的MPSend或MPSendPackets函数,可以在这两个函数里截获并处理所有要通过网卡向外发送的数据包。

当外部数据包到达网卡时,首先由PtRequestComplete函数处理来自网卡外部数据包的请求,接着由驱动程序中的PtReceive或PtreceivePacket函数接受所有来自网卡的数据包,并将数据包读入数据包缓冲区,可以在两个函数里截获并处理所有系统接收到的来自网卡的数据包。

在拦截数据包过程中,如果读取等待队列中有上层应用程序请求读取数据包的IRP,则从读取等待队列的首部取出一个IRP,并将被截获的数据包拷贝到该IRP所指定的缓冲区中。

在驱动程序中,使用注册设备接口的方法创建设备对象和符号链接,并注册分发例程接口,实现与上层应用程序的通信。

上层应用程序在Visual C++6.0中利用MFC类库实现,用户界面友好。采用MFC SDI接口,在文档类中存储一些截获的简单统计信息,截获的数据以及数据包的解析信息,并在几个视图类中分别显示这些信息。

整个应用程序的核心部分时对底层驱动程序截获的数据包的读取。由于网络中流动的是海量数据,并且数据的流量是随机的,因此可能存在丢包的情况。为了能够保证处理所有的包,或者保证足够低的丢包率,必须尽可能在最小包传输周期内将其处理完毕。应用程序利用Win32的重叠I/O操作和完成端口以及多线程特性极大地提高了运行效率,在测试运行(100M局域网)中可捕获ICMP、UDP、TCP等数据包。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有