对于网络通信程序的调试,我们一般是这样进行的:
客户端 服务器端
打印发送数据
|
使用socket发送数据 --------------> 使用socket接受数据
| |
打印发送结果(发送的字节数) 打印接收到的数据
上面的测试方法,需要对程序添加打印代码,并且每次改动调试信息时,都需要重新编译程序,较为繁琐,效率低。为了查看数据包的内容,我们需要做很多的打印操作,并且还要在log中通过关键字来查找打印的内容。
Wireshark是网络抓包,并对包进行分析的软件。通过调用pcap库,它可按照我们的需求,抓取各种数据包。
默认情况下,Wireshark可对各种流行的通信协议进行解包,能够在窗口中清晰的看到通信协议中每个段的值。但是当我们使用自己的通信协议时,wireshark只能识别到TCP/UDP协议,我们的数据内容无法识别,只能在窗口中的Data段中显示原始数据,我以前都是能通过偏移,来与自己程序中的数值进行一一比较,以检测自己的程序所发送的数据是否正确。
由于受不了数偏移,比对结构体的繁琐,前阵子准备好好看看wireshark的使用,总感觉这么成熟的软件,不会只能�云胀ǖ耐ㄐ判榻薪獍2榭词褂檬植幔唬诘谑隆盠ua Support in Wireshark“中有对此功能的描述。只要用lua写一个脚本,并在程序启动时调用即可(这些,在手册中都有说明)。
举个例子,假如我们使用结构体进行通信,众多消息结构体中,有如下一个:
写一个lua脚本来解析包中的这部分内容(假设我们使用UDP协议,12000端口):
示例脚本中用到了wireshark所提供的API函数,更多信息和函数说明,可参考wireshark自带的使用说明。
客户端 服务器端
打印发送数据
|
使用socket发送数据 --------------> 使用socket接受数据
| |
打印发送结果(发送的字节数) 打印接收到的数据
上面的测试方法,需要对程序添加打印代码,并且每次改动调试信息时,都需要重新编译程序,较为繁琐,效率低。为了查看数据包的内容,我们需要做很多的打印操作,并且还要在log中通过关键字来查找打印的内容。
Wireshark是网络抓包,并对包进行分析的软件。通过调用pcap库,它可按照我们的需求,抓取各种数据包。
默认情况下,Wireshark可对各种流行的通信协议进行解包,能够在窗口中清晰的看到通信协议中每个段的值。但是当我们使用自己的通信协议时,wireshark只能识别到TCP/UDP协议,我们的数据内容无法识别,只能在窗口中的Data段中显示原始数据,我以前都是能通过偏移,来与自己程序中的数值进行一一比较,以检测自己的程序所发送的数据是否正确。
由于受不了数偏移,比对结构体的繁琐,前阵子准备好好看看wireshark的使用,总感觉这么成熟的软件,不会只能�云胀ǖ耐ㄐ判榻薪獍2榭词褂檬植幔唬诘谑隆盠ua Support in Wireshark“中有对此功能的描述。只要用lua写一个脚本,并在程序启动时调用即可(这些,在手册中都有说明)。
举个例子,假如我们使用结构体进行通信,众多消息结构体中,有如下一个:
复制代码
|
写一个lua脚本来解析包中的这部分内容(假设我们使用UDP协议,12000端口):
复制代码
|
示例脚本中用到了wireshark所提供的API函数,更多信息和函数说明,可参考wireshark自带的使用说明。