每一个“丑得人神共愤”的泡妞高 手都有一颗坚忍的心,这证明了人类 在绝境中毫不妥协的求生精神,反正丑都丑了,索性放开手脚大干一场,这就叫“无产阶级失去的是锁链,得到的是全世界”
2013年(130)
分类: WINDOWS
2013-08-12 18:20:05
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函数库设置过滤规则。
可以本地文件形式保存和读取已捕获的数据包信息。
分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。
支持协议包括:IPv4、IPv6、ARP、ICMP、TCP、UDP、HTTP。
界面:
一、工欲善其事,必先配环境——配置winpcap开发环境
1.0、背景
WinPcap(Windows Packet Capture)是Windows平台下的链路层网络访问工具,其目的在于为Windows应用程序提供访问网络底层的能力。需要注意的是WinPcap只能把数据包从网络中抓过来(其实是复制过来,并没有真实的抓过来,感觉像是拍了张照),并不能修改数据。
“那么在哪里可以买得到呢?”,其实不用买,要得到很容易,更何况咱中国人没有为软件付费的习惯:),参看下一节,“不可或缺的东西”:
1.1、不可或缺的东西
WinPcap V4.1.2:驱动程序、Dll文件
WinPcap V4.1.2 Developer’s Pack:库文件、头文件、简单的示例程序代码和帮助文件
当然还有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”分解!
为了方便学习,完整的代码下载在这里: