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是免费的,是一个绿色软件,无需安装和注册,我们向大家承诺绝对不修改你的计算机的注册表,可以直接运行(当然,为了你使用方便,我们还是制作了一个安装包)。
II. SnifferFox工作原理
软件首先把网卡设置为混杂模式,然后获得网卡接收到的数据,按TCP/IP协议对数据包进行分析,按照用户的要求把一部分包过滤掉,然后再把这些等剩下的数据包写入缓冲区(一块指定大小的内存块,可以根据用户计算机的内存大小手工设置),显示在用户界面上,当缓冲区满了的时候,系统会自动把缓冲区的数据写入到外存中去。
下图是一个简单的说明。
SnifferFox是一个多线程的系统,大致可以分成3个线程(实现的时候实际只用了2个),抓包线程(Sniffer Thread),协议分析和过滤的线程,用户界面。工作在数据链路层,因此可以获得原始的数据帧,所以SnifferFox可以支持ARP,RARP等底层协议。
由于Sniffer截获的包的数据量是相当大的,所以把这些包都保存在内存中是不太现实的想法,所以这里我们引进了操作系统中两个概念Cache和Buffer。Cache是临时保存数据包的一个链表。为了不给用户的计算机带来太大的负担我们限制这个链表的最大长度为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 Team:zhengsh,gourf
VIII. 结束语
尽管SnifferFox只是一个小的软件,但是我们通过这个文档也只能够了解它的很小一部分,所以如果你要详细的了解它,只是通过这个文档是绝对不够的。进一步的阅读就只有源代码了,因为我们也没有太多的时间来详细地写出系统的设计。
如果你在使用了SnifferFox以后有关于它的建议或者想法,无论赞扬的还是批评的或者其它方面的,欢迎反馈给到我们的邮箱:shaohui_1983#163.com, gouruifeng_529#sohu.com,感谢你的支持。
另外,程序中用到了Suipack组件和WinPcap,请在本站下载