winpcap静默安装方法

最近有个软件项目,需要使用winpcap提供的网络监测功能,生成的exe安装包里面需要静默安装winpcap所有功能文件。

null

以WinPcap 3.0a 为例。通过比较安装前后的文件系统和注册表快照,很容易了解整个安装过程。

除去反安装的部分,关键的文件有三个:wpcap.dll,packet.dll和npf.sys。前面两个文件位于system32目录下,第三个在system

32/drivers下。而注册表的变化是增加了一个系统服务NPF。注意,是系统服务(即驱动)不是Win32服务。

作为系统服务,不但要在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services下增加主键,在HKEY_LOCAL_MACHINE/SYSTEM/

CurrentControlSet/Enum/Root下也增加主键。而后者默认只有SYSTEM身份才可以修改。幸运的是,并不需要手动添加它,winpcap

被调用时会自动搞定。甚至完全不用手动修改注册表,所有的事winpcap都会自己完成,只需要将三个文件复制到合适的位置就行

了。 作为范例,还是演示一下如何修改注册表:利用前面说过的inf文件来实现。

[Version]

Signature=”$WINDOWS NT$”

[DefaultInstall.Services]

AddService=NPF,,winpcap_svr

[winpcap_svr]

DisplayName=Netgroup Packet Filter

ServiceType=0x1

StartType=3

ErrorControl=1

ServiceBinary=%12%/npf.sys

将上面这些内容保存为_wpcap_.inf文件。

再写一个批处理_wpcap_.bat:

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %CD%/_wpcap_.inf

del _wpcap_.inf

if /i %CD%==%SYSTEMROOT%/system32 goto COPYDRV

copy packet.dll %SYSTEMROOT%/system32/

copy wpcap.dll %SYSTEMROOT%/system32/

del packet.dll

del wpcap.dll

:COPYDRV

if /i %CD%==%SYSTEMROOT%/system32/drivers goto END

copy npf.sys %SYSTEMROOT%/system32/drivers/

del npf.sys

:END

del %0

然后用winrar将所有文件(5个)打包为自解压的exe,并将『高级自解压选项』->『解压后运行』设置为_wpcap_.bat,命令行的w

inpcap安装包就制作完成了。 注意,批处理最后一行没有回车符。否则会因为正在运行而无法删除自己。

WinPcap.exe安装实现的逻辑实际上相当于 对 wpcap.dll、packet.dll 和 npf.sys 这三个文件放到相应的系统文件夹下。

首先我们需要知道安装需要的文件:Packet.dll,WanPacket.dll,wpcap.dll,pthreadVC.dll,npf.sys。他们所在的位置也需要搞清楚,如果是手动拷贝,则需要将文件Packet.dll,WanPacket.dll,wpcap.dll,pthreadVC.dll复制到system32中,将npf.sys复制到system32\drivers中。npf是我们要安装的一个驱动服务,安装这个服务,我们需要使用sc.exe的处理:sc create npf binpath= system32\drivers\npf.sys type= kernel start= demand。同时卸载方法是:先停止驱动npf(sc stop npf),再删除驱动(sc delete npf),最后删除上文提到的5个文件。

1、x86 系统

  对于32位系统而言,我们需要把 x86版本的wpcap.dll、packet.dll 和 npf.sys这三个文件进行拷贝到不同位置,分别为:

  wpcap.dll (x86版本) 拷贝到 C:\Windows\system32\ 下

  packet.dll (x86版本) 拷贝到 C:\Windows\system32\ 下

  npf.sys (x86版本) 拷贝到 C:\Windows\system32\drivers\ 下

  成功后,就相当于WinPcap的免安装版就OK了。

2、x64 系统

  对于64位系统而言,比较复杂一点,拿C++程序对WinPcap 封装来讲

 (1)如果C++编译出来的程序本身是64位的,在x64位的系统上运行,步骤简单些

          wpcap.dll (x64版本) 拷贝到 C:\Windows\system32\ 下

          packet.dll (x64版本) 拷贝到 C:\Windows\system32\ 下

          npf.sys (x64版本) 拷贝到 C:\Windows\system32\drivers\ 下

(2)如果C++编译出来的程序本身是32位的,希望兼容x86和x64都能运行,步骤复杂些 

         wpcap.dll (x64版本) 拷贝到 C:\Windows\system32\ 下

         packet.dll (x64版本) 拷贝到 C:\Windows\system32\ 下

         npf.sys (x64版本) 拷贝到 C:\Windows\system32\drivers\ 下

         wpcap.dll (x86版本) 拷贝到 C:\Windows\SysWOW64\ 下

         packet.dll (x86版本) 拷贝到 C:\Windows\SysWOW64\ 下 至于怎么拿到wpcap.dll、packet.dll 和  npf.sys 的x86位和x64位,其实很简单,下载一个如WinPcap_4_1_3.exe安装在64位机器上就能拿到64位的wpcap.dll、packet.dll 和  npf.sys,再把WinPcap_4_1_3.exe安装到32位的电脑上就可以拿到32位的wpcap.dll、packet.dll 和  npf.sys了。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容