一步一步尝试在MFC下开发基于winpcap的数据包捕获和分析软件.(开发总结,建议先看)

来源:互联网 发布:百度搜索源码 编辑:程序博客网 时间:2024/03/29 03:53

随便转载,转载请注明出处http://blog.csdn.net/leotangcw/

欢迎大家和我交流QQ:17371764     Email:tangchengwen@163.com

        花了两天时间终于把这个软件的大体开发思路和代码写完了,不过由于内容比较多,没法一点一点的仔细讲清楚开发的具体步骤(打字太慢了)在这里总结一下:

       开发 基础:

         1。 这几片文章适合有初级VC开发经验的同学参看,如果您没学过VC,想通过粘代码完成这个软件是不太现实的有很多VC的入门书籍您可以参看,在有一定的VC开发经验以后再来参看这个代码,就可以快速的完成类式的软件。

        2。其次,写网络软件也要求对网络知识有一定的了解,特别是对各个协议的组成要有一定的了解,每个字段多长,是干什么的,应该要比较熟悉。

       3。由于是基于winpcap开发的,所以要求对winpcap开发包有一定的了解,特别是其提供的一些常用的函数,您可以参看winpcap开发手册,在我的博客工具栏就有相应的链接,写的很详尽,还有一些不错的例子,相信对您的开发有很大的帮助。

       开发步骤:

     1。构思您的软件界面,看要使用什么控件,先熟悉这些控件的使用方法。

     2。参看winpcap的开发手册,在例子中理解其是怎么捕获数据包的,在看例子时,同时参看其各个重要函数的说明。(虽然是英文的开发手册,但是写的很通俗易懂,网上也有人翻译成中文了,记得是在沙沙的流水博客上面看过)

     3。在有了上面的基础以后,就是开始写程序了,最好有总体的功能划分以后再开始写,不要像我想到哪写到哪。由易到难,慢慢写,不要着急,每天写几个功能就行了。

     4。在大体成型后就是调试了,看有什么错误或不好的地方就做修改,然后打包。

     我的总体程序思路:

      1。先在设置页获取到网卡列表和其他信息,如:是否使用混杂模式,需要捕捉多少个数据包,需要捕捉多长时间,由于我采用的是每次捕包都存入文件的方式,如果没有选择保存文件,就会存入默认的文件,这样每次捕包时就不会导致内存不断膨胀。这里有一个经验就是一定要使用winpcap中的pcap_findalldevs函数,来得到一个网卡接口链表,不要使用winpcap例子中的pcap_lookupdevs,因为我试过,很多机器的第一个网卡接口是一个虚拟的接口,所以造成无法捕获正常包,有的朋友使用pcap_lookupdevs接着使用pcap_lookupnet想得到IP地址却得到0.0.0.0也是这个原因,所以我在页面左下角做了一个IP和子网掩码的显示,如果选的网卡对了,就可以显示相应的IP和MASK,这样对多网卡支持也要好的多。

     2。设置好了以后点击开始就开始捕包,把捕获数据包的函数放到了另一个线程中,这样程序的性能也要好的多,CPU占用率<1%,这里有一个重要的经验就是不要用在SDK开发时常用的pcap_loop而要选用pcap_next_ex等替代函数,这样才不会有回掉函数的那个问题。捕包同时打开一个对话框做包统计,捕包时对话框里面就可以不断更新已经捕获的包数目和捕包时间,如果设置的捕获时间到了,或是设置的捕获包数目到了,或是点击了停止按钮都会引发停止捕获的事件。

     3。一旦停止捕获,就会从保存的数据包文件里读取出来数据包的内容,添加到ListView里面,同时存入一个自己的结构体,保存在内存里面,这样每点击一个条目就会显示该条目的具体信息和16进制值等。

     4。在完成以上功能以后还可以加入一些别的功能,如winpcap的发包功能,该功能很不错,可以发送原始数据包,也就是可以直接指定数据包的各个字段,包括以太网头。我就用这个功能写了一个ARP欺骗,可以让寝室另一哥们的电脑上不了网

     5。如果您的VC水平不错,那就不用看我的具体实现了,通过上面的步骤您就可以实现一个不错的捕获程序。如果您还要参看具体的实现,那么这个总结也更利于您看代码时了解我的思路。

一步一步尝试在MFC下开发基于winpcap的数据包捕获和分析软件.(之一)

http://blog.csdn.net/leotangcw/archive/2006/05/11/724976.aspx

 

到此,这个题目算是写完了,如果您对其有兴趣,欢迎与我交流。

QQ:17371764

Email:tangchengwen@163.com