01 编译tshark
从wireshark官方下载源代码进行编译,本博客使用稳定版本1.12.6。编译过程中可能要升级Glib库,而Glib库可能需要信赖PCRE。
为了方便调试需要把编译器的优化功能关闭,同时不编译带GUI的wireshark,可以使用如下命令,统一关闭优化并在编译时加入调试信息。
./configure --enable-wireshark=no CFLAGS=-g3\ -O0 CXXFLAGS=-g3\ -O0
02 调试
wireshark源代码根目录下的tshark是一个shell脚本,调用了./libs/tshark可执行程序,shell脚本在调用真正的tshark之前做了一些环境准备,主要是库路径的指定。简单一点可以直接安装所有编译后的二进制程序。
sudo make install
sudo ldconfig
安装之后再来调试真正的tshark程序。
03 关键数据结构
wireshark在解析完一条报文后返回一个树形结构,包含了报文各层协议的字段信息,遍历这个树的语义是:
(1)给一颗树,先遍历first_child子树,后遍历next子树;
(2) 递归步骤1
edt->tree的孩子对应各层协议,每层协议的子树对应各层协议的字段