如何在另一个环境(例如 VM)中重现真实站点的 http 流量

如何在另一个环境(例如 VM)中重现真实站点的 http 流量

我的 Web 应用程序中有一个我无法重现的错误。所有日志看起来都正常,或者至少我看不到任何异常。但它确实发生了。所以我想我可以记录所有往返于我网站的流量,等待错误发生,然后以某种方式在我的测试环境中重播它。它确实发生了!所以我有这样捕获的数据:

tcpdump -s 1514 -X tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) -Z root -C 20 -W 1000 -w capture.cap

我不知道该如何处理它。我有一个虚拟机运行着相同版本的 Web 应用程序,我想在其中重播录制的数据。我应该如何处理?

[编辑]

我尝试过这样做tcpreplay下列的这个例子但我的网络服务器没有记录任何流量。

我的测试机器(Fedora 8)在 VMWare Player 中运行。假设机器的 IP 为 192.168.41.128,并且它有一个网络接口:eth0(环回除外)——示例中的步骤 #2 和 #3 在我的例子中应该是什么样子?我应该在同一台机器上运行它还是在另一台机器上运行它?

答案1

您有几个选择,它们都很酷,但没有一个是嵌入式产品。需要组装。

您可能想要做的是忘记已经检查过的日志,或者至少放弃重播这些文件的任何想法。设置其中一个系统并以受控的方式使用它来测试您的流量。

答案2

您可以使用tcptrace将 pcap 文件转换为单独的请求,然后可以使用重放netcat。以下是示例:

tcpdump -s 0 port http -i en0 -w dump.pcap
tcptrace -e dump.pcap
cat *.dat | nc -v <IP_OF_YOUR_TEST_HOST>

第二步可能会创建太多文件,导致*无法正常工作。在这种情况下,对第三条命令使用 for 循环:

for file in $(ls | grep .dat); do cat $file | nc -v <IP_OF_YOUR_TEST_HOST>; done

请注意,这可能比您原来的流量慢。

答案3

GoReplay 旨在捕获生产流量并在测试环境中重放。请参阅https://goreplay.org/或者https://github.com/buger/goreplay/wiki了解更多信息。

相关内容