这几天由于项目需求,做了一个局域网ip和MAC地址搜索的程序,程序调试完成了但是有一个问题一直困扰这我,就是软件打包后,每次都要安装WinPcap后才能用自己的程序,很是烦人,经过几天的测试终于找到了两种方法,不需要安装WinPcap。经过测试都没有问题。
方法一:经过很多次的分析,程序主要是用到了WinPcap的一个驱动文件,当安装Wincap程序后你会发现 在C:\WINDOWS\system32\drivers下面会有一个npf.sys文件,系统下的驱动,在C:\WINDOWS\system32文件夹下会发现WinPcap相关的库文件,其中有一个paket.dll库就是我在程序中用到的库。这时你可以把这个npf.sys文件拷出来,再把Wincap卸载掉,此时运行自己的程序是不能实现IP和MAC地址的搜做的,这时可以把刚才拷出来的文件npf.sys重新拷贝到C:\WINDOWS\system32\drivers下面,再运行自己的程序,你会奇迹般的发现可以正常搜索。所以这个npf.sys文件是很重要的,现在的方法是你可以在程序中编写一个copy程序,把npf.sys文件拷贝到C:\WINDOWS\system32\drivers文件夹下。这样就OK了。
方法二:方法一其实实现起来比较简单而且方便,但是还有一个更好的办法。其实通过分析发现npf.sys就是系统的一个驱动,你只要把它加载注册表中,就把这个驱动加载好了。当你把npf.sys文件拷贝到C:\WINDOWS\system32\drivers下面时系统会自动加载到注册表如下图:system32\drivers\npf.sys
现在我们怎么办那,我们也可以仿照这个自己加载这个NPF驱动程序到注册表,只是我们加载路径不是系统路径,可以把npf.sys文件拷贝到我们的工程中,通过程序创建注册表,并加载我们自己的路径驱动。这样就不用在程序打包后每次安装时先要安装WinPcap程序。
经过测试两种方法都能实现功能,只是第二种方法稍微麻烦点。还有要注意的是32位系统和64位系统用到的npf文件是不一样的。在不同系统中要加载不同的文件。