wireshark源码探索No.2---文档

来源:互联网 发布:怎么制作一个软件 编辑:程序博客网 时间:2024/05/29 07:24
这篇主要是介绍一下wireshark的开发文档,主要是介绍都有哪些文档帮助开发者,帮助文档主要有哪些内容。
大部分童鞋可能直接就搜到https://www.wireshark.org/docs/wsdg_html_chunked/,这个官方文档内容比较详实,但是我还是喜欢从代码里面找帮助文档。。

1、wireshark代码结构:

从我的观点看,我们暂时关注上面标注的四个文件夹就可以了,
doc:帮助文档
epan:核心代码,全部的协议解析都在其下的dissector下。名字由来,epan.h中有解释:Ethereal Packet ANalyzer
plugins:插件代码
UI:wireshark界面
如果你是想做协议解析开发或者了解,也许只要看doc和epan文件夹就好了,毕竟不需要看页面啥样。

2、帮助文档看啥哩?

README.design:wireshark设计文档

README.developer:开发者阅读文档,主要是规范

README.capture:抓包文档

README.dissector:协议解析文档


1)README.design:
作者开门见山,README.developer才是最全的设计文档,但是它只是对添加一个新的协议解析器有帮助,并没有介绍整个wireshark的核心部分,所以有了这个README.design。可惜里面只介绍了一些大概,而且文档有些陈旧。
  1. 每个wireshark有一个cfile对象,表明打开的文件(或者从驱动取包)
  2. cfile里面有一个plist成员,指向所有的链路层数据frame_data
  3. 每个frame_data都有一个指针,指向下一个,自己形成链表结构而已(最新的代码好像没有这个指针了)
  4. wtap_seek_read负责读取到内存
  5. epan_dissect_new负责解析

2)README.developer:
这个文档主要是针对wireshark的开发者约定的一些内容。注意假设你想参与到wireshark开发阵营,这个文档对你才有大的帮助,如果只是想阅读以下他的代码,也许就没有那么多的作用了。

     各个文档的内容介绍
You'll find additional information in the following README files:
- README.capture        - the capture engine internals
- README.design         - Wireshark software design - incomplete(也指出了design文档是不全面的)
- README.developer      - this file
- README.dissector      - How to dissect a packet
- README.display_filter - Display Filter Engine
- README.idl2wrs        - CORBA IDL converter
- README.packaging      - how to distribute a software package containing WS
- README.regression     - regression testing of WS and TS
- README.stats_tree     - a tree statistics counting specific packets
- README.tapping        - "tap" a dissector to get protocol specific events
- README.xml-output     - how to work with the PDML exported output
- wiretap/README.developer - how to add additional capture file types to  Wiretap
     
     剩下的都是对开发者的一些约定
     Portability:全是为了可移植性,跨平台性的一些规则设置 Don't,Not。。。。。
    • 例如不能用//做注释;
    • 不能在声明变量的时候初始化;
    • 不能用union结构;
    • 不能使用uchar,ushort这些变量,所以wireshark都是用的guint32这些glib库的变量
     String handling:字符串的一部分处理内容,主要是推荐了一部分字符串处理函数,避免使用自己的编译环境的库函数,影响跨平台。
     Robustness:对维护程序 强壮稳定性做了一些规定
     Name convention:命名规范,所有的函数名都使用下划线的命名规范,不要类似java使用InterCapConvention大小写夹杂的方式
     White space convention:啊哦,世界性难题,这里规定了,也算是约定,4个空格最好
     Compiler warnings:规定编译告警级别
     Miscellaneous notes:等等等。。

3)README.capture:
文档主要介绍了wireshark的抓包机制,内容没有深入的去读,毕竟这部分不是我关心的,简单的大意就是wireshark没有自己做抓包驱动,全部使用的libpcap/winpcap库去抓的数据报文。
wireshark自己会创建两个线程,一个负责抓包,一个负责解析,抓包线程和解析线程会通过一个“pipe”通信,类似发送抓到包啦等信息。抓包线程会将报文缓存到临时文件,解析线程负责读取。
内容不做过多介绍,大家如果有了解,可以补充给我一下。

4)README.dissector:
重头戏来了,这部分就是wireshark的核心,协议解析模块的介绍。文档主要分为两部分:
Setting up your protocol dissector code
     这部分主要介绍了如何创建一个自己的协议解析器,以及wireshark提供的丰富的无比强大的接口函数,从获取报文、提取报文每个字段内容、展示到UI界面、创建protocol tree都做了详细的介绍。
     最为可贵的是,他们还提供了一个协议解析器的范例:packet-PROTOABBREV.c,也许你只要把这个骨架拷贝出一个新文件,按照他们的接口,填充一些血肉,就成为一个完整的解析器了。
Advanced dissector topics:
     主部分主要是介绍的一些高级功能,例如如何处理类似ftp的父子连接(conversations),tcp,udp的报文重组,ptvcursors快速开发模式等内容

     README.dissector是wireshark的核心内容,后面会有单独的文章做介绍,后续完成后会一一贴给大家。
     
原创粉丝点击