Как воспроизвести трафик http реального сайта в другой среде (например, ВМ)
В моем веб-приложении есть ошибка, которую я не могу воспроизвести. Все журналы выглядят нормально или, по крайней мере, я не вижу ничего необычного. Но так бывает. Поэтому я подумал, что смогу записывать весь трафик на / с моего веб-сайта, ожидая появления ошибки и имея ее, и каким-то образом воспроизводить ее в моей тестовой среде. И это случилось! Итак, у меня есть данные, полученные этим:
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
и я не знаю, что мне с этим делать. У меня есть виртуальная машина с той же версией веб-приложения, и я хотел бы воспроизвести записанные в ней данные. Как мне подойти к этому?
[РЕДАКТИРОВАТЬ]
Я попытался сделать это с tcpreplay, следуя этому примеру, но мой веб-сервер не зарегистрировал трафик.
Моя тестовая машина (Fedora 8) работает в VMWare Player. Предполагая, что IP-адрес машины - 192.168.41.128, и он имеет один сетевой интерфейс: eth0 (кроме loopback) - как должны выглядеть шаги 2 и 3 из примера в моем случае? Должен ли я запустить его на той же машине или с другой?
3 ответа
У вас есть несколько вариантов, все они классные и ни один из них не является выпадающим. Некоторая сборка требуется.
- Существует приложение Sprocket для Perl, позволяющее воспроизводить веб-трафик. Вот сырой PERL.
- Там есть TCPReplay.
- Если вы используете сервер Varnish, вы можете использовать varnishreplay.
- Есть также инструмент под названием " PReplay ", который предназначен для компьютеров с Windows.
- JWireReplay будет воспроизводить записи tcpdump.
Что вы, вероятно, захотите сделать, - это забыть журналы, которые вы уже проверяли, или, по крайней мере, отказаться от любого желания воспроизвести эти файлы. Настройте одну из этих систем и используйте ее контролируемым образом для проверки вашего трафика.
Ты можешь использовать 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
Обратите внимание, что это может быть медленнее, чем ваш исходный трафик.
GoReplay предназначен для захвата производственного трафика и его воспроизведения в тестовых средах. См. https://goreplay.org/ или https://github.com/buger/goreplay/wiki для получения дополнительной информации.