这篇主要是介绍一下wireshark的开发文档,主要是介绍都有哪些文档帮助开发者,帮助文档主要有哪些内容。


大部分童鞋可能直接就搜到,这个官方文档内容比较详实,但是我还是喜欢从代码里面找帮助文档。。




1、wireshark代码结构:




wireshark原始码流界面是啥意思 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的核心内容,后面会有单独的文章做介绍,后续完成后会一一贴给大家。