NDIS网络防火墙开发体会总结.doc_第1页
NDIS网络防火墙开发体会总结.doc_第2页
NDIS网络防火墙开发体会总结.doc_第3页
NDIS网络防火墙开发体会总结.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、NDIS 网络防火墙开发实践体会总结一、 window 软件防火墙开发概述:在 window 下开发软件防火墙能够实现: NDIS 数据包的截获、 NDIS 数据包的抓取、 NDIS 数据包的分析、 NDIS 数据包过滤、 NDIS 驱动对 IP 与 port 的过滤、 NDIS 中间层驱动安装技术等。 本文对 NDIS 开发大体流程、 NDIS 开发注意事项、 NDIS 安装进程中显现的各类问题都给予详细说明,希望对做 NDIS 开发程序员有所帮忙。目前能够实现软件防火墙的方式有:( 1) SOCKET 端口形式。( 2) NDIS 中间驱动 IPHOOK 形式( xp/2003 )。( 3

2、) NDIS 中间驱动 miniport 形式( xp/2003/vista/win7/win2020 )。三种形式从开发难度到利用范围都有自身的特点。( 4 ) SOCKET 形式是面向应用层开发的,在代码及调试方面相对后两种简单的多,但SOCKET 形式不能捕捉所有数据包,因此用 socket 开发防火墙不是最好的选择。( 5)后两种属于NDIS 中间驱动程序开发,是面向驱动层(底层 )开发,代码编写及调试较socket 形式上难。(说明:可能大部份采纳高级语言程序员全然都没接触过驱动开发)但 NDIS 形式能够捕捉到所有通过网卡的数据包( NDIS 中间驱动是插入到协议层与网卡驱动层的中

3、间驱动程序因此数据必需通过)。因此本文作者建议采纳NDIS 开发软件网络防火墙。二、 DNIS 中间驱动开发注意事项:NDIS 中间驱动程序开发window用的 window 版本有 window200 、防火墙要注意windowwindow200 server 、版本问题,因为目前用户利window xp 、 window2003 、window vistawindow 7 、 windown 2008 server 。你采纳的NDIS 开发技术直接决定是不是能在不同window版本上运行,这是很关键的问题。目前作者明白的NDIS防火墙技术有两种:. IP_FIREWALL_HOOK(NDI

4、S防火墙钩子技术适合XP/2003) 。( 1)这种技术的特点:相对miniport 的开发、测试、安装简单些。( 2)安装步骤简单见四:能够采纳注册表注册后用net start 启动,也能够采纳:OpenService、CreateService、StartService 等函数创建效劳形式启动驱动具体用法请查询msdn 帮忙 )( 3)比较典型的案例:此种方式对 window vista 之前 window2000 以后的操作系统是没有任何问题。通过作者的开发测试,关于window vista 以后的产品向 window 7 window2020 是不支持的(这点必然要注意) 。那个地址网

5、上有许多评论有人说还支持,但本文作者给出答案是不支持, 理由msdn 中有如此一句话 : Note: Starting with Windows Vista,do not implementfilter-hook or firewall-hook drivers. UseWindows FilteringPlatform CalloutDrivers instead.翻译成中文可能意思:从vista 以后再也不支持 ”filter-hook ”,请利用 )。( 4) 你 能 够 在 window 7 或 window2020 测 试 下 你 的 钩 子 防 火 墙 在status=IoCall

6、Driver 加入 dbprint 代码用截获 status 的值你会发此刻2000、 xp、2003 下返回 0 一切正常, 在 vista、win7 、2020 下返回 0xc0000002- 0xc000000d的任意值。因此钩子防火墙在vista 及以后的版本是不能实现的。因此作者建议在vista 以后的版本就要用IP HOOK( ipfirewall)浪费时刻啦。(miniport protocol) 中间驱动技术 (XP/2003/vista/win7/2020) 。这种形式在2000、 xp、2003、vista、 win7 、2020 下都能够现实,但原理和代码实现上要比钩子复

7、杂的多,安装测试也比较麻烦。典型列子是ddk 源文件途径下的passthru 项目。但我开发那个项目后,总结下 NDIS 开发其实并非是很难只是以前对这方面知识缺乏已。三、 NDIS 程序结构:. DriverEntry 函数:那个函数必需存在,它是 window 驱动的入口函数(与 miniport 都必需概念的函数,在驱动安装启动是执行)。IPHOOK.那个函数有两个参数:IN PDRIVER_OBJECTDriverObject,IN PUNICODE_STRINGRegistryPath。. DriverEntry 内部经常使用代码:NdisMInitializeWrapper (中间

8、驱动miniport ):初始化小端口时会用到这连个参数。IoCreateDevice (钩子驱动IPHOOK ):成立 IO 设备时会用到。.成立 miniport 与 protocol 端口(中间驱动miniport ):NDIS_PROTOCOL_CHARACTERISTICSPChars;NDIS_MINIPORT_CHARACTERISTICSMChars;并别离设置PChars、 MChars 一系列属性参数指定处置函数。那个地址有几个很重要的属性在开发防火墙程序中很重要我说明下其它参数见帮忙文档。DDK= 自概念截获发送函数=自概念截获同意函数=自概念截获同意函数;1;2;(说明

9、: ReceivePacketHandler 与 ReceiveHandler 区别:是针对不同型号网卡别离采纳这两个属性同意数据的建议全数设置上你自概念的同意函数。).若是是 IPHOOK 驱动需要绑定钩子(钩子驱动IPHOOK) :IP_SET_FIREWALL_HOOK_INFO filthook;= 钩子函数(处置过滤 /抓包函数的函数) ;= 1;= true;应用那个IoBuildDeviceIoControlRequest函数绑定具体见DDK 文档。. MajorFunction函数任务的指派(IPHOOK 与 miniport 都必需概念的函数) :DriverEntry 函数

10、是驱动与操作系统的接口函数,MajorFunction 函数是用户通过应用程序操纵驱动的接口。.几个经常使用的函数(IPHOOK与miniport都必需概念的函数) :DispatchTableIRP_MJ_CREATE =创建函数DispatchTableIRP_MJ_CLEANUP =清除函数DispatchTableIRP_MJ_CLOSE =关闭函数 ;DispatchTableIRP_MJ_DEVICE_CONTROL =;用户IO 操纵函数(那个函数很重要);以上三个函数能够指向IO操纵函数即:DispatchTableIRP_MJ_CREATE =DispatchTableIRP

11、_MJ_CLEANUP =DispatchTableIRP_MJ_CLOSE =DispatchTableIRP_MJ_DEVICE_CONTROL =.用户 IO 操纵函数 ( DevIoControl ):是用户通过指定用户 IO 操纵函数(那个函数很重要)IOCTOL 码向 NDIS 驱动发出指令;要求驱动为自己做事。 (具体成立IO 操纵码见 DDK ). DevIoControl( NDIS 是一个很重要的函数,IPHOOK 与 miniport 都必需概念那个函数)函数的概念规那么:它有两个参数:IN PDEVICE_OBJECTpDeviceObject,IN PIRPpIrp

12、(那个是要紧参数,是驱动程序与用户的数据通信接口)PIO_STACK_LOCA TIONpIrpSp; 必需概念本地IO 堆栈变量。pIrpSp = IoGetCurrentIrpStackLocation(pIrp);面的 pIrp- = outputBufferLength句用不行会出问题的。 它是用在向用户应用程序返回数据的进程体中,行你应用程序可能同意不到 NDIS 返回给你的数据。若是这句用不2.同时同意和返回如何做?其实读取和写入满是在 pIrp- 缓存中咱们操作的顺序是先把用户发来的数据读出把要写的的数据写入中。例如:用户 EXE 中 IO 操作是:DeviceIoControl

13、(devhdle,IO操作码,输入数据地址,输入数据长度, 输出数据地址,输出数据长度,返回值地址, NULL)NDIS能够如此读取返回数据:读取数据: ibuff=pIrp-;返回数据: oBuffer=pIrp-;自概念函数 (oBuffer) 向 oBuffer 写数据。明白啦吗?还不明白,我还有个方法确实是你自己动手实验一万遍。其实我已经说的很明白啦。注意: IO 操作码:那个码必需是可读写的。至于怎么生产你看DDK 。.驱动卸载函数(Unload IPHOOK与 miniport 都必需概念的函数):那个函数只有一个参数 IN PDRIVER_OBJECTDriverObject 。

14、作用:当驱动卸载时释放咱们在程序中分派的内存、miniport 端口、IO 设备等。总结: 从 NDIS 你 驱程序结构中咱们不难找出动中是不是注NDIS 册 啦的 miniport 与 iphookminiport_protocol开发的区别确实是在仍是绑定啦IP_SET_FIREWALL_HOOK_INFO 钩子,大体结构是一样。 若是你在网上看到开发文档感到很难时我只能说: ”真正了解一门技术是有一个进程的,进程中碰到些困难是很正常的,关键是你可否坚持到最后! ”。NDIS四安装NDIS 驱动方式:驱动安装:相当简单我那个地址介绍两种方式:.1.手动注册表成立效劳Windows Regi

15、stry Editor Version驱动名 Type=dword:00000001Start=dword:00000003ErrorControl=dword:00000001驱动文件名 .sysDisplayName= 驱动名 Group=Extended Base4.1.2.用 ”NET STRA T 效劳器名 ”启动 / ”NET STOP 效劳器名 ”停止效劳.安装启动后能够用代码直接利用此效劳:( 1) #defineMY_DEVICE_NAME驱动名 用代码取代手工来完成:( 1)(具体代码来完成不是很难)。于(与)前步能够完全( 2)概念 SC_HANDLE hSCManage

16、r; 变量。( 3) hSCManager = OpenSCManager(NULL, NULL,SC_MANAGER_ALL_ACCESS);打开效劳操纵治理器。( 4)若是 (3) 成功 OpenService(hSCManager, lpszServiceName,SERVICE_ALL_ACCESS);打开效劳。( 5)若是 (4) 失败说明驱动效劳没有安装开始安装驱动: hService = CreateService(hSCManager,lpszServiceName,lpszServiceName,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER

17、,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,lpszDriverPath,NULL,NULL,NULL,NULL,NULL);成立效劳。( 6)启动效劳器 StartService (hService, 0, NULL);( 7)关闭 SC_HANDLE : CloseServiceHandle(hSCManager);( 8)再利用 .中代码访问驱动。以上说明啦NDIS 钩子驱动(不含miniport-protocol端口)的安装利用两种方式。中间驱动( miniport-protocol )安装利用方式:只要你把握其实也很简单(你能够参考DDK_S

18、RC 下的 netcfg 例子。其中有一个很重要的函数是HrInstallNetComponent 你把它看明白安装大体就差不多啦。但那个地址有个专门大开发安装程序问题:确实是netcfg 是用 ddk 编译的 ,咱们有时要把安装代码集成到VC 编译器中,有人说include ddk 包文件。我那个地址建议你用 DDK编译成 dll 接口函数。.第 二 你 最 好 对inf文 件 各 个 键 值 作 用 了 解 详 细 。 我 那 个 地 址 要 说 明SourceDisksFiles 那 个 键 , 若 是 你 的inf文 件 与sys 在 同 一 个 途 径 下 那 么SourceDisksFiles 键值为空。如下:SourceDisksFiles=1 改成;=1 前面加分号若是不如此在安装sys 时可能提示你选择sys 途径问题。. 值得专门注意的是:不管你安装成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论