Webアプリケーションに再現できないバグがあります。すべてのログに問題がないか、少なくとも異常なことは何も見られません。しかし、それは起こります。そのため、バグが発生するのを待って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 に続いて この例 でこれを実行しようとしましたが、Webサーバーがトラフィックをログに記録していません。
私のテストマシン(Fedora 8)はVMWarePlayerで実行されます。マシンのIPが192.168.41.128であり、ネットワークインターフェイスが1つあると仮定します:eth0(ループバックを除く)-私の場合、例のステップ#2と#3はどのようになりますか?同じマシンで実行する必要がありますか、それとも別のマシンから実行する必要がありますか?
いくつかのオプションがありますが、それらはすべてクールで、ドロップイン製品はありません。いくつかの組み立てが必要です。
おそらくやりたいことは、すでに調べたログを忘れるか、少なくともそれらのファイルを再生したいという欲求を放棄することです。これらのシステムの1つをセットアップし、制御された方法で使用してトラフィックをテストします。
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>
2番目のステップでは、*
が正しく機能するにはファイルが多すぎる可能性があります。この場合、3番目のコマンドにforループを使用します。
for file in $(ls | grep .dat); do cat $file | nc -v <IP_OF_YOUR_TEST_Host>; done
これは元のトラフィックよりも遅い場合があることに注意してください。
GoReplayは、本番トラフィックをキャプチャし、それをテスト環境で再生するように設計されています。詳細については、 https://goreplay.org/ または https://github.com/buger/goreplay/wiki を参照してください。