给定一个.pcap
(或类似的)文件,我想选择一个 TCP 连接并将两个应用程序数据流(一个来自另一个对等方,一个两个来自另一个对等方)转储到磁盘上的两个单独文件中。
假设我有一个.pcap
文件,除其他外,我知道它包含 HTTP/1.1 明文连接的完整 TCP 流(从 SYN 到最终 FIN+ACK/RST)。我想要两个包含内容的结果文件。IE。一个文件有
GET / HTTP/1.1\r\n
host: foobar.com\r\n
\r\n
另一个文件有
HTTP/1.1 200 ok\r\n
content-length: ...\r\n
... \r\n
\r\n
<html>...</html>
我希望这正是在用户空间中看到/发送的应用程序数据流量(来自read
// recv`/...)write
。send/
我想要做的是转储一些流量并使用它来测试我的解析器是否有某个网络协议。解析器应该只能读取其中一个文件并尝试解析数据流。
这样的命令行工具怎么看?我不确定这是否超级有用,但我认为如果我还提供了一个可以执行此操作的虚构工具的使用示例,它可能会让我在寻找什么更清楚。让我们称之为虚构的工具(这就是我要找的)tcp-stream-extract
。我想用类似的东西来称呼它
### imaginary usage example of the tool that I'd like to find :)
# dump from 12345 to 23456
tcp-stream-extract \
-i my-captured-packets.pcap
-s 127.0.0.1:12345 \ # source address 127.0.0.1:12345
-d 127.0.0.1:23456 \ # destination address 127.0.0.1:23456
-t '2021-01-28 09:12:00Z' \ # the TCP conn was alive at that time
-w from-port-12345-to-port-23456
# dump from 23456 to 12345
tcp-stream-extract \
-i my-captured-packets.pcap
-s 127.0.0.1:23456 \ # source address 127.0.0.1:12345
-d 127.0.0.1:12345 \ # destination address 127.0.0.1:23456
-t '2021-01-28 09:12:00Z' \ # the TCP conn was at that time
-w from-port-23456-to-port-12345
如果您必须手动执行此操作,则需要删除封装协议的标头。但是,它们有一些微妙之处,可能并非微不足道:
0x0800
=IPv4、0x86dd
=IPv6、0x8100
=802.1q 标签),以太网有效负载可能包含也可能不包含后跟 FCS(4 个字节)。tcpflow
正如@AlexD 所建议的那样,我建议使用适当的工具,例如 。