发布SnifferFox Beta版本了

SnifferFox是一款基于Winpcap开发的Windows平台嗅探器,支持多种协议分析及数据包统计,具备良好的用户界面与多语言支持。

 

下载地址已经更改为 http://www.shaohui.org/snifferfox.html 

这是我和我同学去年做的一个项目,现在把它公布出来,包括发行版本和项目的源代码.

 源代码        下载

 发行版本    下载
如果不能够下载,可以直接和我们联系,或者留言.

 

 

 

 


I.   什么是SnifferFox.

II.  SnifferFox工作原理

III.    SnifferFox目录结构

IV.    SnifferFox功能说明.

V.  SnifferFox特点

VI.    扩展SnifferFox

VII.  作者

VIII. 结束语

   

 

I.      什么是SnifferFox

SnifferFox是运行于Windows平台的嗅探器(Sniffer)。用于截获经过本地计算机指定网卡的所有数据包,并且对这些包进行分析和统计。

SnifferFox是基于Winpcap开发的,Winpcap是一个开源的项目,为了能够得到原始的数据包,因此我们选择了它(由于Socket工作在IP层,不能够得到ARP,RARP的包,所以我们没有使用)。所以说,在你安装SnifferFox以前请先安装Winpcap,否则就会出现找不到网卡的提示。

       我们选择是Borland C++Builder来开发这个Sniffer,经过近2个月的努力,我们写了将近6000多行的代码(文件docs/codestat.txt有详细的统计),这个软件终于基本开发完成了,现在我们可以发布它的Alpha版了。不过里面可能还是有不少我们没有发现的错误,这可能回在以后的版本中得到更正。

SnifferFox是免费的,是一个绿色软件,无需安装和注册,我们向大家承诺绝对不修改你的计算机的注册表,可以直接运行(当然,为了你使用方便,我们还是制作了一个安装包)

下图是SnifferFoxBanner

II. SnifferFox工作原理

软件首先把网卡设置为混杂模式,然后获得网卡接收到的数据,按TCP/IP协议对数据包进行分析,按照用户的要求把一部分包过滤掉,然后再把这些等剩下的数据包写入缓冲区(一块指定大小的内存块,可以根据用户计算机的内存大小手工设置),显示在用户界面上,当缓冲区满了的时候,系统会自动把缓冲区的数据写入到外存中去。

下图是一个简单的说明。

 

 

         

SnifferFox是一个多线程的系统,大致可以分成3个线程(实现的时候实际只用了2),抓包线程(Sniffer Thread),协议分析和过滤的线程,用户界面。工作在数据链路层,因此可以获得原始的数据帧,所以SnifferFox可以支持ARPRARP等底层协议。

由于Sniffer截获的包的数据量是相当大的,所以把这些包都保存在内存中是不太现实的想法,所以这里我们引进了操作系统中两个概念CacheBufferCache是临时保存数据包的一个链表。为了不给用户的计算机带来太大的负担我们限制这个链表的最大长度为5000。当这个链表达到长度达到其用户设置的上限的时候,系统会自动把链表中的数据写到Buffer中,然后把Cache清空。

Buffer是一个二进制文件,它是由一个一个的数据包组成。我们不妨称每个包为一个记录。其长度是不固定的,主要是因为数据包的大小是没有办法确定的。

 

它由4个部分构成,ID(4字节),段偏移(4字节),数据帧的相关信息(16字节),数据(长度不定,不过可以根据图中的计算公式来计算)。其中段偏移也就是记录长度,主要是用于确定记录的结束位置和下一个记录的开始位置。

 

III.          SnifferFox目录结构

当然这里我们必须说明的是发布版本和开发版本的目录结构是不一样的,开发版本中的目录更多,更复杂,但是发布版本中的目录发布版本都有,因此这里只介绍开发版本的目录,发布版本可以对照得出(参考docs/dir.txt)

+Snifferfox

       +Bin              编译器编译后的二进制文件已经动态链接库文件

       +Config         配置文件

       +Images       图片

       +Obj             编译器生成得中间文件

       +Docs           文档目录

       +Project        工程目录

       +Core           核心的代码,主要是自己定义的数据结构以及其实现

       +Gui              实现图形界面的代码

       +Lang           多语言支持

       +Cache         缓存目录,用于存放临时文件

       +3Com         系统中使用的第3方控件    

              +Save           用户目录,用于保存用户文件

 

IV.          SnifferFox功能说明

1.      数据包截取

用户可以指定一个计算机的网卡,然后用SnifferFox截取经过这张网卡的所以数据包。系统截取这些包以后会按照要求以列表的形式显示包的摘要信息,以面板的形式显示包的具体信息。

2.      数据包过滤

我了得到满足我们要求的包,我们可以对截取到的包进行过滤,根据不用的要求我们可以定义2中不同的过滤器:协议过滤器和IP地址过滤器。这两种过滤器是同时工作的,只有同时满足这2种要求的包才会被保留下来,其它的不满足要求的包都被丢弃掉。

3.      数据包统计

为了方便用户了解自己截取到的包的分布情况,我们提供了数据包统计的功能,按照不同的协议层次统计其百分比以及包的数量。用图的形式显示出来。

4.      协议分析

根据包的类型,我们会针对不同的情况对包的数据进行分析和显示。SnifferFox支持了比较多的的协议类型,从数据链路层到应用层几乎都支持。

对应用层以下的协议,都进行了详细的分析,取出了数据包中的每一个字段。至于应用层,暂时只识别了112个协议,但是由于应用层协议实在繁多而且每个协议都相当复杂,所以我们没有进行深入的分析。

5.      智能排序

为了方便用户快速找到指定的包,我们提供了智能排序的功能,在用户停止截取数据包的时候,只需要点击一下列表的其中一个字段,系统就会自动对列表中的数据进行升序排序,再次点击排序方式切换。

6.      检测网卡信息

系统能够自动检测到系统中的网卡数目(包括虚拟的网卡),动态地显示在菜单列表中。同时能够检测网卡的相关信息。

7.      作为截包的守护进程

经过测试,SnifferFox可以在计算机运行几天而不会死机,因此我们可以用它作为专门的截包程序,像守护进程一样一直运行(当然这有一定的限制,当截包实在太多的时候,比如好几个G的时候就有些困难了,因为在这个版本中,我们没有对Buffer文件进行分块,这或许会在以后的版本中加入这个功能)

8.      状态动态显示

为了在截取包的时候不影响用户的其它工作,我们可以把SnifferFox最小化,然后它会自动地在任务栏上消失,只显示一个小的托盘图标,在它工作的时候,它的图标会动态地闪烁,停止的时候会停止不动。另外,我们还制作了一个小的浮动窗口显示系统状态,默认的时候放置于窗口顶部,

9.      数据包的保存和载入

用户可以把截取的包保存到一个指定的文件(扩展名为*.sni),在需要的时候再通过SnifferFox载入,这种方式查看数据包和截取包的时候没有什么区别的,同时还可以动态地决定查看那一页(系统已经有分页的功能,并且是动态分页,我们可以自己定义每页的记录个数)

10.  存储用户选项

系统选项的内容保存在config/config.ini中,这是一个in文件,一旦用户设置(比如界面,语言等)改变,该改变就会记录在文件中,系统下一次运行的时候就会自动根据这些设置做响应的工作。

 

V. SnifferFox特点

1.      简单实用

简单是我们追求的目标,尽管系统的设计和实现比较复杂,但是我们更希望用户看到的是一个简单的系统而且是一个实用的系统。

2.      界面美观

SnifferFox的界面没有什么可说的,系统中包含了5套标准的界面(Winxp,MacOS,Protein,DeepBlue,BlueGrass),在不用重新启动系统的情况下可以及时地更换系统界面,而且是整体更换(当然这需要感谢我们的第3方控件)

3.      多语言支持

在设计系统的时候我们就考虑到了这个问题,所以SnifferFox本身就是支持多语言的,我们很容易对它进行扩展,只需要把Lang/english翻译成响应的语言就可以,不需要进行任何的程序更改。系统中已经提供了中英两中语言的支持,可以很容易的切换。

4.      有比较好的扩展性

我们在语言,界面,协议方面都充分考虑到了其可扩展性。所以,要在这个版本的基础上开发新的版本相对来说还是不难的。这样可以很好的复用现在的代码。

5.      操作方便

这是我们考虑得比较多的一个问题,我们在尽量地让系统的操作方式符合人们的习惯,使得用户觉得它方便好用。

6.      支持了比较多的协议

以太网中,SnifferFox分析了TCP/IP族的几乎应用层以下的所有协议,应用层的协议能够识别112个。

 

VI.          扩展SnifferFox

扩展SnifferFox是一件不容易的工作,除非你对它的结构非常了解,当然只是靠现在你读这个文档的话那是很难做到的。我们可以分3个方面扩展它:

1.      协议扩展

SnifferFox用是用面向对象的方法来分析设计和实现的,因此要扩展它,需要写相应的协议分析的Class来解决,然后在主程序中把它们连接起来即可。具体需要详细了解现在的系统结构才可以做到。

2.      界面扩展

通过更改第3方控件SUIPack来实现(3com目录),具体参见SUIPack的相关文档。

3.      语言扩展

这是SnifferFox中扩展功能最简单的部分,直接翻译Lang/english文件就可以了。

 

VII.     作者

FoxBackBone Teamzhengshgourf

VIII.              结束语

尽管SnifferFox只是一个小的软件,但是我们通过这个文档也只能够了解它的很小一部分,所以如果你要详细的了解它,只是通过这个文档是绝对不够的。进一步的阅读就只有源代码了,因为我们也没有太多的时间来详细地写出系统的设计。

如果你在使用了SnifferFox以后有关于它的建议或者想法,无论赞扬的还是批评的或者其它方面的,欢迎反馈给到我们的邮箱:shaohui_1983#163.com gouruifeng_529#sohu.com,感谢你的支持。

 

 

评论 34
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值