虽然wireshark自带了很多知名协议的解析插件,譬如HTTP、DHCP等等,然而在实际应用环境中,有不少软件之间的通信协议都是私有的,如游戏客户端和服务器之间的交互协议通常都是私有的,wireshark无法具体解析出各种字段之间的含义,只能显示接收到的二进制数据,给协议的分析和问题的排查带来了一定的困难,尤其是协议内容比较复杂时。
本文一个自定义的简单协议入手,分析如何基于wireshark开发自定义协议分析插件。
1.1. 概述
本书使用Go语言来描述协议的交互过程。Go由Google出品,号称是互联网上的C语言,有点类似于C语言,以其简洁和高并发著称。
即使不了解Go语言也没有关系,本书给出的代码,基本可以自释其义,了解过程即可,重点不在于此。
1.2. 协议描述
1 package packet
2
3 import (
4 "bytes"
5 "encoding/binary"
6 "fmt"
7 "os"
8 )
9
10 type NPacket struct {
11 Version int16 //两个字节
12 ID uint32 //四个字节
13 Buffer [1024]byte //简单起见,固定为1024个字节
14 }
15