Назад | Перейти на главную страницу

Как воспроизвести 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 из примера должны выглядеть в моем случае? Должен ли я запускать его на той же машине или с другой?

У вас есть несколько вариантов, все они классные, и ни один из них не подходит. Требуется некоторая сборка.

Что вы, вероятно, захотите сделать, так это забыть журналы, которые вы уже просмотрели, или, по крайней мере, отказаться от любого желания воспроизвести эти файлы. Настройте одну из этих систем и используйте ее контролируемым образом для проверки вашего трафика.

GoReplay предназначен для захвата производственного трафика и воспроизведения его в тестовых средах. Видеть https://goreplay.org/ или https://github.com/buger/goreplay/wiki Чтобы получить больше информации.

Ты можешь использовать 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

Обратите внимание, что это может быть медленнее, чем ваш исходный трафик.