tcp流重播工具

MK.*_*MK. 11 testing networking network-programming tcp

我正在寻找一种用于记录和重放TCP流的一面进行测试的工具.我看到记录整个TCP流(服务器和客户端)的工具,用于测试防火墙等,但我正在寻找的是一种工具,它只记录客户端提交的流量(带有计时信息),然后重新提交到服务器进行测试.

Mik*_*ton 14

由于TCP处理重传,序列号SACK和窗口的方式,这可能是比您想象的更难的任务.

通常人们使用tcpreplay进行数据包重放; 但是,它不支持同步TCP序列号.由于您需要具有双向TCP流(并且这需要同步seq编号),请使用以下选项之一:

  1. 如果这是一个非常交互式的客户端/服务器协议,您可以使用scapy去除流的TCP内容,解析时间和交互性.接下来使用此信息,打开服务器的新TCP套接字并将该数据反序列化为新的TCP套接字.scapy如果您遇到TCP重新传输和窗口动态,解析原始流可能会很棘手.将字节写入新的TCP套接字不需要自己处理序列编号......操作系统会处理这个问题.

  2. 如果这是一个简单的流,你可以不用定时(或者想手动插入定时信息),你可以使用wireshark从TCP流中获取原始字节而不用担心解析scapy.获得原始字节后,将这些字节写入新的TCP套接字(根据需要考虑交互性).将字节写入新的TCP套接字不需要自己处理序列编号......操作系统会处理这个问题.

  3. 如果您的流是严格的文本(但不是html或xml)命令,例如telnet会话,则类似Expect的解决方案可能比上述解析更容易.在此解决方案中,您不会直接从您的代码打开TCP套接字,使用期望spawntelnet(或其他)会话并使用send/ 重放文本命令expect.您期望的库/底层操作系统会处理seq编号.

  4. 如果您正在测试Web服务,我怀疑模拟真实的Web客户端点击带有Selenium或的链接要容易得多Splinter.您的http库/底层操作系统将负责新流中的seq编号.