Введение
Lantern Room проводит небольшие мастер-классы по бумажным фонарикам. Приложение бронирования использует HTTPS, поэтому обычный захват показывает зашифрованный обмен, а не сведения о бронировании. Вам разрешено анализировать этот контролируемый учебный сервис и синтетических посетителей. Сначала вы прочитаете нормальную эталонную запись, затем создадите и захватите собственный новый визит.
Результатом станут настоящий файл PCAPNG и отдельный журнал ключей TLS, которые сможет открыть другой уполномоченный аналитик. Нужны базовые навыки навигации в Wireshark, работы с фильтрами отображения, ввода простых команд и понимание путей. Программирование и администрирование сертификатов не требуются. Вы будете использовать Terminal Emulator и окна Wireshark в Desktop. Лабораторная работа самостоятельно подготавливает файлы и локальный сервис. Продолжительность оценена автором с учётом чтения и обычных ошибок ввода.
Сделайте нормальную эталонную запись читаемой
На этом шаге вы расшифруете нормальное бронирование и познакомитесь с полями, устанавливающими результат.
Начните в Desktop. Откройте Applications → Terminal Emulator внизу слева и выполните полную команду. Этот терминал будет занят до закрытия Wireshark.
wireshark -C Booking /home/labex/project/booking/input/casebook.pcapng
-C Booking выбирает подготовленный, изначально пустой профиль настроек Booking. Профиль сохраняет настройки окна анализа. Разверните Wireshark кнопкой в заголовке. Входной захват и input/casebook.keys — оригиналы только для чтения. Сохраняйте результаты в output/.
HTTPS переносит HTTP внутри TLS, шифрующего разговор приложения. TCP переносит записи TLS между конечными точками. Эта запись использует TLS 1.3 и HTTP/1.1. Локальный сервис доступен по 127.0.0.1:18443, а локальный тестовый адрес Hazel — 127.0.0.21. Эти адреса находятся в одном учебном контейнере, а не на разных физических машинах.
Введите http в строке фильтра отображения и нажмите Enter. Сначала расшифрованных строк HTTP нет. Очистите строку и найдите рукопожатие TLS и зашифрованные Application Data. Рукопожатие устанавливает сеанс; Application Data переносят сообщения бронирования. Сам захват не предоставляет их открытый текст.
Журнал ключей TLS содержит секреты, которые разрешённый клиент намеренно записал для конкретных сеансов. Это не список паролей и не сертификат сервера. Сертификат сервера или закрытый ключ RSA не заменяют секреты этого сеанса TLS 1.3. В реальной работе захваты и журналы ключей конфиденциальны: передавайте их только в разрешённых пределах анализа. Здесь личности, бронирования и секреты относятся только к локальному упражнению.
Откройте Edit → Preferences. Разверните Protocols, щёлкните список протоколов, наберите tls и выберите TLS. В (Pre)-Master-Secret log filename введите следующий абсолютный путь. Оставьте включёнными Reassemble TLS records spanning multiple TCP segments и Reassemble TLS Application Data spanning multiple TLS records, затем нажмите OK.
/home/labex/project/booking/input/casebook.keys
Снова примените фильтр http. Теперь видны один запрос POST и один ответ HTTP. Если список пуст, очистите фильтр, проверьте написание пути и вернитесь к настройкам TLS. Неправильный или посторонний журнал оставляет Application Data зашифрованными, но не доказывает отсутствие запроса.
Выберите POST. HTTP — протокол запросов и ответов. POST отправляет данные; /api/bookings — URI ресурса бронирования. Щёлкните запрос правой кнопкой и выберите Follow → TLS Stream. Follow TLS Stream показывает расшифрованные байты приложения; Follow TCP Stream показывает всё ещё зашифрованные транспортные байты. Прочитайте обе стороны, прокручивая при необходимости. Определяйте отправителя по строке запроса и строке статуса ответа, а не только по цвету текста.
Тело запроса — JSON, набор именованных значений в фигурных скобках. Прочитайте visitor, attempt, workshop и slot. Ответ повторяет их и добавляет accepted, reason и confirmation. У нормального бронирования Hazel значения accepted: true, reason: "confirmed", а подтверждение принадлежит hazel-01. В JSON true — логическое значение, значения в кавычках — строки, а null обозначает отсутствие значения.
HTTP/1.1 200 OK означает, что сервер обработал этот запрос HTTP. Прикладной результат бронирования определяется полями JSON. Это различие понадобится в следующей работе. Большой пробел после JSON — намеренное учебное дополнение, разделяющее настоящий ответ на несколько сегментов TLS/TCP. Это не дополнительное бронирование.

Прочитайте повторённый в ответе attempt вместе с accepted, reason и confirmation. Одного статуса HTTP недостаточно.
Закройте Follow кнопкой Close. Wireshark оставляет фильтр tcp.stream eq ..., показывающий всё выбранное соединение TCP, включая рукопожатие и сегменты. Фильтр отображения меняет только вид. Закройте главное окно, чтобы сохранить настройки профиля и освободить терминал. Настройка готова, когда Booking расшифровывает полный запрос и ответ эталонной записи.
Захватите и повторно откройте собственный визит
На этом шаге вы захватите новый разрешённый визит и независимо откроете его действительно сохранённые пакеты.
Начните в Desktop, в приглашении Terminal Emulator после закрытия эталонного окна. Журнал ключей эталона не раскрывает другой сеанс TLS. Вы захватите новый визит и сохраните его собственные секреты рядом с захватом.
Запустите подготовленную программу захвата:
python3 /opt/labex/booking/capture.py
Она открывает настоящий интерфейс живого захвата Wireshark в отдельном профиле BookingLive. Фиксированный источник пакетов захватывает только локальный TCP-трафик порта курса 18443, с пределами 15 минут и 4 MB. Он использует канал передачи живых байтов в Wireshark, а не воспроизведение. Общие привилегии захвата не выдаются, настройки входа не меняются. Оставьте терминал и Wireshark открытыми. Перед отправкой трафика дождитесь Live packet feed ready в терминале и активного окна захвата.
Откройте второй Terminal Emulator через Applications → Terminal Emulator. Нижняя панель позволяет переключаться между двумя терминалами и Wireshark. В новом терминале запустите разрешённый клиент:
python3 /opt/labex/booking/booking.py client
Клиент проверяет сертификат и имя узла локального сервиса, выполняет один настоящий запрос бронирования и записывает секреты нового сеанса в /home/labex/project/booking/output/live.keys. Он сообщает о завершении визита, не печатая ответ. Новый attempt отличается при каждом запуске. Клиент your-visit использует 127.0.0.26.
Вернитесь в Wireshark через нижнюю панель. Дождитесь фактического появления пакетов, включая последний пакет завершения соединения TCP, и только затем нажмите красный квадрат Stop на панели инструментов. Завершение клиента не означает, что интерфейс захвата уже получил все пакеты. Должны быть видны рукопожатие, зашифрованный прикладной обмен и заключительный FIN или RST. FIN закрывает одно направление TCP; RST немедленно завершает соединение. Заключительный RST этого контролируемого клиента не является результатом бронирования.
Выберите File → Save As (или Ctrl+S для несохранённого захвата), оставьте формат pcapng и сохраните:
/home/labex/project/booking/output/live.pcapng
Сохраните настоящий захват, а не текст списка пакетов или снимок экрана. Оставьте журнал ключей отдельным; не используйте Inject TLS Secrets. После сохранения закройте главное окно захвата. В первом терминале программа должна завершиться с native dumpcap status: 0, вернув приглашение. Закрытие окна также закрывает учебный источник; повторное подключение терминала не сбрасывает сервис бронирования.
В любом терминале откройте сохранённый файл в изначально пустом профиле проверки:
wireshark -C BookingReview /home/labex/project/booking/output/live.pcapng
Примените http: сначала список снова пуст. В Edit → Preferences → Protocols → TLS сначала попробуйте эталонный журнал input/casebook.keys, указав полный абсолютный путь из шага 1. Примените кнопкой OK. Он по-прежнему не расшифровывает новый сеанс. Теперь замените настройку соответствующим новым журналом:
/home/labex/project/booking/output/live.keys
Нажмите OK и примените http. Появятся один POST и его ответ. Щёлкните POST правой кнопкой и выберите Follow → TLS Stream. Прочитайте новый attempt, убедитесь, что ответ повторяет его, и проверьте accepted, reason и собственное confirmation. Правильный результат — подтверждённое бронирование paper-lantern на sat-14. Закройте Follow и главное окно. Вы независимо открыли настоящий сохранённый захват, не заимствуя секреты эталонного сеанса.

Запрос и ответ показывают одинаковый новый attempt. Ваше сгенерированное значение отличается от примера; важна связь между ними.
Если остановили слишком рано, сохраните неполную попытку перед повтором. Выполните следующие две команды в терминале только при наличии обоих прежних выходных файлов. mv переименовывает каждый файл. Эти пути не содержат пробелов, поэтому кавычки не нужны. Команды не меняют входные файлы или сервис.
mv /home/labex/project/booking/output/live.pcapng /home/labex/project/booking/output/live-previous.pcapng
mv /home/labex/project/booking/output/live.keys /home/labex/project/booking/output/live-previous.keys
Затем повторите последовательность: запуск захвата → клиент во втором терминале → видимые последние пакеты → Stop → Save → Close → повторное открытие. Если файл live-previous уже существует, сначала выберите другое свободное имя резервной копии. Клиент намеренно отказывается перезаписывать live.keys, защищая захват от потери соответствующих секретов. Неверный путь сохранения исправляется через File → Save As без нового визита. При опечатке фильтра очистите его и снова введите http; не сбрасывайте среду.
Резюме
Вы расшифровали разрешённую эталонную запись в Wireshark, захватили новый настоящий визит HTTPS и повторно открыли сохранённый PCAPNG с собственным журналом ключей. Неподходящие секреты эталона не расшифровывают новый сеанс. Ваши пригодные для передачи результаты — output/live.pcapng и output/live.keys.
Вы также различили статус HTTP и результат бронирования и прочитали повторённый в ответе attempt. В следующей работе это различие поможет разобрать неудачное бронирование и повторную попытку на одном постоянном соединении.



