如何在另一个环境(例如VM)中复制真实网站的httpstream量

我的Web应用程序中有一个错误,我无法重现。 所有的日志看起来不错,或者至less我看不出什么不寻常的东西。 但它发生。 所以我想我可以logging所有的stream量到/从我的网站等待的错误发生,并有这个,重播它以某种方式在我的testing环境。 它确实发生了! 所以我有这个数据:

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应用程序的虚拟机,我想重播logging的数据。 我应该如何处理这个?

[编辑]

我试着用tcpreplay做这个例子,但是我的web服务器没有logging任何stream量。

我的testing机器(Fedora 8)运行在VMWare Player中。 假设机器的IP是192.168.41.128,它有一个networking接口:eth0(loopback除外) – 在我的情况下,示例中的步骤#2和#3应该如何? 我应该在同一台机器上运行还是从另一台运行?

你有几个select,他们都很酷,没有任何一个插入式产品。 一些组装需要。

  • PERL应用程序Sprocket能够重放networkingstream量。 这是原始的PERL 。
  • 有TCPReplay 。
  • 如果您使用清漆服务器,则可以使用varnishreplay 。
  • 还有一个叫做“ PReplay ”的工具,用于Windows机器。
  • JWireReplay将重播tcpdump捕获。

你可能想要做的是忘记你已经检查过的日志,或者至less放弃重播这些文件的愿望。 build立这些系统之一,并以受控的方式使用它来testing你的stream量。

您可以使用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> 

第二步可能会创build太多文件来正确工作。 在这种情况下,对第三个命令使用for循环:

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

请注意,这可能比您的原始stream量慢。

GoReplay旨在捕获生产stream量并在testing环境中重播。 有关更多信息,请参阅https://goreplay.org/或https://github.com/buger/goreplay/wiki