网络抓包工具的开发和实现C++抓包嗅探器

0、说在前面的话

1) 本文将以一个初学者的角度,一步一步几乎是从0开始讲述如何完成一个基于winpcap+MFC的sniffer(嗅探器)当然我指的“0”并不是指连编程都不会,如果C/C++不知为何物那么还是别看这篇文章了,本文只有那么几点小小要求:

         a.懂基本的编程语法,只会java的没关系,语言这东西语法差别不大,看着看着就懂了

         b.懂一点点网络知识,起码知道OSI七层网络模型或者TCP/IP四层(也有说五层的)网络模型

         c. 想学怎么做一个sniffer,而不是想来这里down代码,这种代码CSDN下载里多得是,不用来这里了

2) 本文里的程序不是最优秀的,不是最牛的,甚至不知道能不能算作优秀,所以牛人可以略过此文,此文是给那些想开发但又不会开发,懂那么一点点又其实不太懂的人看的(写这个程序之前,我在MFC方面也算是这一类人:)

3)  本文不讨论专业、学术内容,什么架构之类的都不在讨论范围之类,一切以实用为主,一切以开发出一个sniffer为核心

4) 本文主要内容:

            a.工欲善其事,必先配环境——配置winpcap开发环境

      b.掀起你的盖头来,让我来画你的脸——用MFC开发GUI

    c.安得广厦千万间,先画蓝图再砌砖——搭建wipcap抓包框架

      d.要想从此过,留下协议头——各层网络协议头的实现

      e.莫道无人能识君,其实我懂你的心——解析数据包

      f.千呼万唤始出来,不抱琵琶也露面——将解析数据写到GUI 

5)来看看我们要做的最终成果: 

   功能:

      列出监测主机的所有网卡,选择一个网卡,在混杂模式下进行监听。

      捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。

      可以本地文件形式保存和读取已捕获的数据包信息。

      分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。

      支持协议包括:IPv4IPv6、ARP、ICMP、TCP、UDP、HTTP。  

  界面:

   一、工欲善其事,必先配环境——配置winpcap开发环境

        1.0、背景

        WinPcap(Windows Packet Capture)是Windows平台下的链路层网络访问工具,其目的在于为Windows应用程序提供访问网络底层的能力。需要注意的是WinPcap只能把数据包从网络中抓过来(其实是复制过来,并没有真实的抓过来,感觉像是拍了张照),并不能修改数据。

        “那么在哪里可以买得到呢?”,其实不用买,要得到很容易,更何况咱中国人没有为软件付费的习惯:),参看下一节,“不可或缺的东西”:

        1.1、不可或缺的东西

WinPcap V4.1.2:驱动程序、Dll文件

http://www.winpcap.org/install/bin/WinPcap_4_1_2.exe

WinPcap V4.1.2 Developer’s Pack:库文件、头文件、简单的示例程序代码和帮助文件

        http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip

当然还有VisualStudio2008或者VC++6.0,本文用的是VS2008

        (这玩意的下载网址就不用我介绍了吧)

1.2、配置过程

l 添加头文件目录

VS2008:

        工具->属性->项目和解决方案-> VC++目录->包含文件->添加WinPcap开发包中的Include目录,如下图:

        

VC6:

         Tools->Options->Derectories->Include files->添加WinPcap开发包中的Include目录,如下图:

 

l 添加库文件目录

VS2008:

与上一个步骤一样,只有一小个变化,选择“库文件”,然后添加WinPcap开发包中的Lib目录,如下图:

 

VC6:

       Tools->Options->Derectories->Library files->添加WinPcap开发包中的Lib目录,如下图:

       

l 增加与WinPcap有关的预处理定义

VS2008:

        项目->项目属性->配置属性->预处理定义->添加WPCAP和HAVE_REMOTE,如下图:

 

                  VC6:

       Project->Setting->C/C++->Preprocessor->添加WPCAP和HAVE_REMOTE,如下图:

 

l 添加wpcap.lib库文件

                            VS2008

    项目->项目属性->配置属性->连接器->命令行->附加选项框中加入wpcap.lib,如下图: 

  

VC6:

                        Project->setting->link->加入wpcap.lib,如下图:

         

l 添加pcap.h头文件

在使用WinPcap API的所有源文件中添加#include "pcap.h”

1.3、       运行测试代码

所有配置工作全部搞定,现在来运行测试代码,如果能顺利执行,那么就配置成功了。

这里的测试代码其实就是WinPcap中自带的实例,还记得“不可或缺的文件”中下载的两个文件没?从WpdPack_4_1_2.zip解压出来的文件中有Examples-pcap和Examples-remote两个文件夹,进入Examples-pcap中可以看到,里面有很多实例,任意打开一个文件夹,打开其中的.dsw文件,执行一下就知道了。

笔者这里选择的是UDPdump这个实例,执行成功的画面如下: 

 

 第一章至此结束,欲知后事如何,请看下一章“起你的盖头来,让我来画你的脸——用MFC开发GUI”分解!


为了方便学习,完整的代码下载在这里:http://download.csdn.net/download/litingli/4110529

 来源:http://blog.csdn.net/litingli/article/details/5950962

来源: http://blog.csdn.net/litingli/article/details/5950962

猜你喜欢

转载自blog.csdn.net/zxl_1996/article/details/80016397