定向修改pcap文件
pcap修改原理
pcap文件作为linux协议栈标准写盘文件被大家所熟知,他也是wireshark支持的标准文件格式。开发过程中我们常常遇到需要测试协议解析功能的需求,但是很多时候我们只通过rfc知道了协议的具体格式要求,编写了对应的解析代码。却没能找到对应的pcap文件进行测试,这样的话心里总是没底,此时我们需要自己修改pcap文件进行测试,修改后将解析结果与wireshark的结果对比即可确保解析流程的正确性。
pcap修改准备
- 传输层一致的其他协议pcap文件,方便只通过应用层的修改将本文件改为其他协议;
- 二进制解析编辑工具,进行二进制内容的增删改查,我使用的是TTHexedit
- wireshark,方便帮我们计算checksum以及验证。
pcap修改步骤
我此处展示将一个http单包修改为pptp协议单包的过程,说明基本步骤与思路。当然,非单包协议要考虑tcp分包的问题,修改更为复杂,但是本文仅做原理说明,点到为止。
准备http单包并复制一份
二进制工具打开俩个文件
找到http单包应用层数据内容
可借助wireshark,将其删改为一个pptp应用层数据,pptp报文格式可参考协议文档rfc2637
可见http数据是从0x47455420开始的数据,我们找一个简单的pptp报文格式。
裁剪长度
之后将http负载长度改为这个pptp报文的定长,为32字节。
此时用wireshark打开该pcap文件是会报错的,因为wireshark有对于长度的检测,包括帧长检测,ip长度检测,所以我们需要打开原始的http单包,找到这些字段对应的二进制并修改为正确的数值,实际上只要记得我们删了多少字节或者增了多少字节,直接加减就好,或者直接选中看二进制工具的选中计数。
修改完后,修改过后的包就可以直接打开了,可能还是会被识别成http,因为这个包满足http的基本特征(端口,dpi特征)等,也可能由于不满足任何协议特征,被视为tcp协议的负载。所以我们仍然需要根据pptp协议要求去做一些修改;
修改负载以及端口等特征
可见pptp有其详细的格式要求,我们按照协议要求去修改内容,让其符合协议规范;
最终修改ip头以及传输层头部的校验和
由于我们修改了负载,需要更新前两层头部的校验和
wireshark会提醒你原始的校验和应该改为多少,直接用二进制修改工具修改即可。