一个具体的场景,写了一个协议解析器,需要足够多的的样本数据包去进行测试,以满足协议报文的覆盖率,但是有一些只有在特定条件下产生的流量很难产生,这时最快的方法是构造pcap数据。
本文使用 Windows 系统下的 wireshark 进行构造pcap数据。当然,Linux 下的 wireshark 也是一样的。
我们随便去 wireshark 的官网:SampleCaptures (wireshark.org) 上去找一个熟悉的协议的pcap数据修改一下,就以大家耳熟能详的 DNS 协议数据(dns+icmp.pcapng.gz)为例吧。
目标:
1. 打开上面的数据包的第一条数据的最后一个字段 Class 字段,将其修改为0x7788。
2. 将第 2 条数据的的 8.8.8.8.in-addr.arpa 部分(26字节)复制一个拼接到第 2 条数据的最后面。
好了,现在我们开始操作吧~
第一步:使用 Notepad++ 新建一个文件,文件名为 DNS.txt,将两条数据按照下图的方法以Hex Dump 格式复制到 DNS.txt 中。
2. 根据具体要求进行修改数据,当修改后的数据包长度发生的,要修改相应的各类 Length 字段的值,以满足实际要求。
修改后的数据:
修改说明:
3. 将 DNS.txt 文件导入 wireshark 软件,具体做法如下:
2. 导入 DNS.txt 文件。
点击导入后,立即变成下面的样子了,生成了一个 importWN57L1.pcapng 格式的文件,然后操作 “文件->另存为” 然下图设置为 DNS.pcap,点击保存后 importWN57L1.pcapng 就变成了DNS.pcap了。
最后的修改结果:
数据1:
数据2:
以上修改的后的数据包在 Linux 下经过验证是可以被 tshark 程序识别的数据类型。
如果上述方法失效,转用 Linux 下的 wireshar 目录下的 text2pcap 程序将 DNS.txt 使用如下命令转换为 DNS.pcap 文件。
text2pcap <输入的txt文件路径> <输出的pcap文件的存放路径>
示例:
[root]# text2pcap ./DNS.txt ./DNS.pcap
Input from: DNS.txt
Output to: DNS.pcap
Output format: pcap
Wrote packet of 131 bytes.
Read 1 potential packet, wrote 1 packet (171 bytes).
[root]# ls
其实上面的 Windows 下直接将 DNS.txt 导入,还是 Linux 使用命令转换,本质都是一样的,不过是前者是图形界面的操作方式,后者是命令的操作方式的区别。
参考资料:
待添加。