我的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,他们都很酷,没有任何一个插入式产品。 一些组装需要。
你可能想要做的是忘记你已经检查过的日志,或者至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 。