首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

经过嗅探获取本机运行的QQ号

2013-10-25 
通过嗅探获取本机运行的QQ号嗅探器对于网络管理人员来说是可以分析局域网中的传输的数据和协议,通过协议和

通过嗅探获取本机运行的QQ号

嗅探器对于网络管理人员来说是可以分析局域网中的传输的数据和协议,通过协议和数据分析可以检测出网络的异常情况。对于黑客来说,同样可以使用嗅探器来获取局域网中的数据,从而获得机密、隐私等信息。

我们本文主要介绍Winpcap的基础开发,通过开发一个嗅探工具来得到本机运行地所有的QQ号。

 

原理篇

 

在我们进行动手开发之前,我们先用Wireshark来对QQ的通信进行分析,我们这里使用的Wireshark的版本号为1.6.2。

第一,我们打开Wireshark这款工具,可以看到软件中会列出本机的所有网卡,如图1所示的本机所有网卡列表。

经过嗅探获取本机运行的QQ号

第二,我们选择要进行嗅探的网卡开始嗅探。在我们选择了要进行嗅探的网卡以后,该网卡被设置为混杂模式。(小提示:混杂模式(Promiscuous Mode)是指一台处于混杂模式的网卡能够接收所有经过它的数据流,而不论该数据流的目的地址是否是该网卡。),

第三,在过滤框中输入过滤条件“oicq”,当输入了过滤条件以后,我们的嗅探器将只嗅探关于QQ相关的协议和数据,如图2所示的过滤条件。

经过嗅探获取本机运行的QQ号

第四,当设置好过滤协议后,在嗅探列表中会出现很多被嗅探到的嗅探记录,在选中某个嗅探记录后,在嗅探记录的下方会出现对该嗅探记录的协议解析,在软件的最下方将显示出该嗅探记录的二进制数据,如图3所示的嗅探记录及信息。

 经过嗅探获取本机运行的QQ号

当我们选中某条嗅探记录以后,我们就可以对嗅探记录的协议解析和嗅探记录的二进制数据进行分析了。我们随便选中一条嗅探记录,如图4所示的协议解析及二进制信息。我们对该部分进行分析。

 经过嗅探获取本机运行的QQ号

在图4中选中的最上面部分为IP协议头(小提示:IP是英文InternetProtocol(网络之间互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议),在IP协议头中,我们主要是通过IP协议头对它上层协议的类型。从图4中可以看出,它的上层协议类型为UDP类型,协议类型的编号为17。

 

在IP协议头的下面部分为UDP协议头(小提示:UDP 是UserDatagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务),在UDP协议头中我们需要得到其中的两个字段,分别是源端口号和目的端口号。从图4中可以看出,本机的源端口号为4004号端口,而远程的目的端口号为8000号端口。这里我们来解释一下,QQ服务器的通信端口都为UDP的8000号端口,当我们向服务器发送数据时,目的端口号为8000号端口,当我们接受从服务器上发来的数据时,源端口号为8000号端口。而QQ的本机端口是从UDP的4000号端口开始的,而图4中的源端口号为4004号端口,说明打开当前QQ号时,已经开了4个QQ号了,因此端口号为4004号端口了。也就是说当前QQ号为第5个被打开的QQ号。

 

在协议解析的最下面就是对QQ协议头的一个解析了。我们最先看到的“Flag:oicq packet(0x02)”就是QQ协议头的标识,0x02是标识该协议头是QQ的协议头,后面的数据应该按照QQ的协议头进行解析。而在Data项中看到的就是QQ的号码了。这里没有太多要强调的了。

 

在最下面的二进制数据中,选中的位置为QQ号码的二进制数据,这个位置是相对于QQ协议头的起始位置,如图5所示的QQ号码二进制偏移位置。

 经过嗅探获取本机运行的QQ号

 

准备篇

 

有了前面的关于协议的分析,我们来开发一个类似的捕获本机运行的QQ号的工具,在我们的这个程序中要用到Winpcap开发包(小提示:Winpcap(Windows packet capture)是Windows平台下一个免费,公共的网络访问系统。开发Wnpcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力)。

 

Winpcap的功能非常的强大,有很多基于它开发的工具,比如大名鼎鼎的Cain,还有我们前面使用到的Wireshark等。Winpcap的作用主要有捕获各种网络数据包、过滤网络数据包、分析网络数据包和存储网络数据包等。在我们使用Winpcap进行编程时,我们需要有Winpcap的运行包和开发包,运行包里包含了Winpcap运行所需要驱动文件和动态连接库(SYS文件和DLL文件),开发包里包含所有函数定义的头文件(H文件),还有编译时用的静态链接库(LIB文件)。有了这些我们就可以进行编程了。

 

要获得Winpcap运行所需的SYS文件和DLL文件,就需要安装Winpcap的运行包,该目前最新的版本是Winpcap 4.1.2,大家可以到它的官方网站进行下载,下载地址是:http://www.winpcap.org/install/default.htm。下载后直接进行安装就可以了,安装步骤比较简单,这里就不进行介绍了。

 

除了要支持Winpcap运行的SYS文件和DLL文件以外,还需要Winpcap的头文件和静态库文件。我们只要下载了它的开发包就可以了。下载地址是:http://www.winpcap.org/devel.htm。目前开发包的最新版本也是Winpcap4.1.2。下载好开发包以后,直接解压缩就可以了。

 

安装好运行包和开发包以后,我们的东西就已经齐备了。不过,我们需要在我们的开发环境中进行配置,我们这里选择的开发环境是VC 6.0。配置的步骤如下:

第一,启动VC 6.0程序。

第二,选择菜单栏的“Tools”->“Options”。

第三,在“Options”界面中选择“Directories”选项卡。

第四,添加头文件的路径和静态库的路径,如图6所示和如图7所示的配置选项。

经过嗅探获取本机运行的QQ号

经过嗅探获取本机运行的QQ号

将以上配置完成后,就可以开始我的开发工作了。

 

 

数据结构及流程篇

 

我们终于可以进入开发阶段了,程序的开发首先要确定一些数据结构,然后在确定我们的程序流程,数据结构是根据我们前面对原理的分析来进行确定的,而程序的流程主要是依赖于Winpcap所提供的开发函数了。只要我们将我们的数据结构和我们的流程搭配起来,我们的软件就算是大功告成了。

 

我们先来确定所需要的数据结构。回顾一下我们在原理篇中提到的内容,我们的步骤是根据IP协议头得到它上层的协议类型,如果是UDP协议的话,就判断UDP的源端口号或者是目的端口号,如果源端口号或目的端口号为8000号端口,那么我们就分析应用层协议的开始字节号是否为0x2,如果是的话,那么就说明是QQ了。

 

按照原理的描述,我们就要定义IP协议头和UDP协议头,还有QQ协议标识的宏定义。IP协议头、UDP协议头和QQ协议标识定义如下:

 

         总结

   

    我们本文主要介绍了如何通过Winpcap函数来获得本地运行QQ的号码,我们了解了Winpcap的强大并学习了Winpcap的函数,而且通过获取QQ号码的例子从思路转变成了代码。
1楼weiwei2012start1小时前
学习了。

热点排行