目录
text2pcap
Text2pcap 是一个读取 ASCII 十六进制转储并将描述的数据写入捕获文件的程序。 text2pcap 可以读取包含多个数据包的十六进制转储,并构建多个数据包的捕获文件。 Text2pcap 还能够生成虚拟以太网、IP 和 UDP、TCP 或 SCTP 标头,以便仅从应用程序级数据的十六进制转储构建完全可处理的数据包转储。
实践一下
比如在php-JA3 TLS握手指纹实践中,我们会捕获到TLS Client Hello的数据包。这篇文章会以一个这样的数据包的十六进制转储作为例子。
简单处理成text2pcap认识的格式
代码如下:
$hex_text = "16:03:01:02:37:01:00:02:33:03:03:64:37:18:e9:37:61:7e:62:4d:e2:a8:4a:fa:7d:06:3e:63:01:d4:da:67:16:f0:14:f8:ab:30:19:82:df:88:80:20:97:ff:62:c5:30:22:f4:11:3b:85:66:97:b2:de:f5:53:f1:40:21:2b:a4:7d:f6:f5:ff:0f:ae:80:40:4c:b8:27:00:20:da:da:13:01:13:02:13:03:c0:2b:c0:2f:c0:2c:c0:30:cc:a9:cc:a8:c0:13:c0:14:00:9c:00:9d:00:2f:00:35:01:00:01:ca:da:da:00:00:00:12:00:00:00:0d:00:12:00:10:04:03:08:04:04:01:05:03:08:05:05:01:08:06:06:01:00:17:00:00:00:05:00:05:01:00:00:00:00:ff:01:00:01:00:44:69:00:05:00:03:02:68:32:00:2d:00:02:01:01:00:0a:00:0a:00:08:7a:7a:00:1d:00:17:00:18:00:0b:00:02:01:00:00:10:00:0e:00:0c:02:68:32:08:68:74:74:70:2f:31:2e:31:00:00:00:19:00:17:00:00:14:70:72:6f:78:79:67:75:65:73:73:2e:62:6a:75:6e:2e:74:65:63:68:fe:0d:00:fa:00:00:01:00:01:de:00:20:0c:f4:2a:5d:df:1a:7a:7a:16:ae:02:dd:0a:0a:1e:29:91:9b:6c:b8:67:57:8c:f2:3f:c5:3d:70:ac:5b:6d:4e:00:d0:f2:62:2e:a6:28:ae:df:63:3c:4e:12:15:bd:35:c4:d8:96:06:48:4b:85:24:95:54:ca:a1:59:ce:36:a6:88:6e:6c:be:79:37:f7:a7:23:d4:74:20:be:1b:7e:c2:69:63:b3:80:5f:f7:b0:15:06:8e:7f:e1:f3:b7:b9:be:4e:47:4c:b3:9c:af:a0:46:f5:b7:13:2d:7a:c0:c0:af:fb:d8:57:7f:1d:bb:53:c8:91:28:c5:08:d4:55:6d:c4:71:a8:e1:7b:08:e8:82:ab:bd:cf:b1:86:f0:38:d5:65:8d:48:22:e5:fe:66:49:ae:42:92:ac:c4:90:f3:7f:85:56:f4:84:dc:30:c2:35:8d:fc:c3:cc:bc:84:13:50:7e:fe:8d:05:e7:7d:c0:a2:9c:69:b7:6a:91:ba:59:ab:80:40:31:01:d8:1d:28:1b:8e:89:f1:39:8a:19:38:db:5f:94:6c:8a:5c:54:27:48:fa:77:77:5d:ee:93:66:ce:db:21:a1:99:58:a2:57:de:bc:96:3c:4d:13:7d:e7:71:d4:79:55:00:2b:00:07:06:ba:ba:03:04:03:03:00:1b:00:03:02:00:02:00:33:00:2b:00:29:7a:7a:00:01:00:00:1d:00:20:d0:f0:83:30:7d:c9:52:bb:42:58:68:1e:12:8d:38:f8:0f:97:20:af:56:8e:69:b1:2f:19:47:24:c2:ee:da:52:00:23:00:00:4a:4a:00:01:00";
$hex_text = '000000 '.strtr($hex_text, [':' => ' ']);
file_put_contents($hex_text,'a.txt');
这里很简单,对于上面的例子,主要做了2件事。
- 在前面插入 "000000 ",注意带有一个空格。
这里表示描述数据包中位置的偏移量开头,后面是冒号、空格或制表符,将其与字节分隔开。
- 将":"替换成空格。
十六进制转储。每个字节都是单独显示的,字节之间用空格分隔。十六进制数字可以是大写或小写
000000 16 03 01 02.....
执行text2pcap命令将十六进制转储转为pcap文件
text2pcap.exe -q -4 1.1.1.1,1.1.1.2 -T 1,2 a.text a.pcap
命令简单解释
- -q
不显示开始时选择的选项的摘要,也不显示最后处理的数据包的计数。
- -4 1.1.1.1,1.1.1.2
在虚拟 IP 标头前添加指定的 IPv4 目标和源地址
- -T 1,2
在每个数据包之前包含虚拟 TCP 标头。以十进制形式指定数据包的源和目标 TCP 端口
- a.txt
读取的文件, 用 - 可以读取标准输入的内容
- a.pcap
写入的文件, 用 - 可以输出到标准输出
查看效果
最后在winshark 中打开这个a.pcap,就可以看到这个TLS Client Hello的数据包的具体内容了。
或者直接重定向到tshark 直接解析:
text2pcap -q -o hex -4 1.1.1.1,1.1.1.2 -T 1,2 a.text - |tshark -r -
或者
cat test.txt |text2pcap.exe -q -4 1.1.1.1,2.2.2.2 -T 1,2 - - |tshark -r -
我遇到的问题
- php fsockopen的函数并不能在
text2pcap.exe -q -4 1.1.1.1,2.2.2.2 -T 1,2 - -
的标准输出中读取到信息。原因未知。
- node spawn 也不能在
text2pcap.exe -q -4 1.1.1.1,2.2.2.2 -T 1,2 - -
的标准输出中读取到信息
- 同时与php 不同的时,node spawn 还无法正常运行
text2pcap.exe -q -4 1.1.1.1,2.2.2.2 -T 1,2 - a.pcap
- 在退出的时候才执行输出
- 标准输入管道和标准输出管道同时打开,node 或php 命令的pipe无法被text2pcap正常处理
参考
text2pcap.html