Вопрос или проблема
Я тестирую перехват HTTPS-запросов с использованием mitmproxy. Я хотел бы добавить некоторые домены, которые нужно исключить из этого механизма. Для этой цели существует опция –ignore-hosts. К сожалению, все мои попытки использовать эту функцию не увенчались успехом.
например, выполняю mitmdump
Mitmproxy: 11.1.3 binary
Python: 3.13.2
OpenSSL: OpenSSL 3.4.1 11 Feb 2025
./mitmdump --ignore-hosts '^(.+\.)?microsoft\.com:443$' --flow-detail 2
[10:59:15.956] HTTP(S) proxy listening at *:8080.
затем выполнить пример запроса на том же хосте через curl
curl --connect-to ::127.0.0.1:8080 -k https://packages.microsoft.com/debian/11/prod/dists/bullseye/InRelease
в логах потока можно увидеть этот запрос, который перехватывается, даже если он должен был быть пропущен. Регулярное выражение соответствует packages.microsoft.com:443
[11:01:02.996][127.0.0.1:56818] client connect
[11:01:03.034][127.0.0.1:56818] server connect packages.microsoft.com:443 (13.107.246.60:443)
127.0.0.1:56818: GET https://packages.microsoft.com/debian/11/prod/dists/bullseye/InRelease HTTP/2.0
user-agent: curl/7.74.0
accept: */*
<< HTTP/2.0 200 OK 3.6k
...
...
Я также пробовал разные способы с mitmproxy
и интерфейсом потока, где я вводил ignore-hosts регулярное выражение и мог видеть эту опцию в списке параметров сеанса, но домен все еще не игнорируется, и я могу видеть полные детали запроса-ответа.
Ответ или решение
Теория
Проблема, с которой вы столкнулись при использовании mitmproxy, связана с параметром --ignore-hosts
, который предназначен для исключения определённых доменов из процесса перехвата. Этот параметр принимает регулярные выражения для указания доменов, которые не должны перехватываться mitmproxy. Тем не менее, несмотря на использование этой опции, запросы к доменам, которые вы намерены игнорировать, всё равно перехватываются. Это может быть вызвано несколькими факторами, включая неправильное использование регулярных выражений, ошибки в настройках proxy или особенности конкретной версии mitmproxy.
Пример
Вы использовали следующую команду для запуска mitmdump:
./mitmdump --ignore-hosts '^(.+\.)?microsoft\.com:443$' --flow-detail 2
Следующий запрос был выполнен с использованием curl, направляя трафик к локальному proxy серверу на порту 8080:
curl --connect-to ::127.0.0.1:8080 -k https://packages.microsoft.com/debian/11/prod/dists/bullseye/InRelease
Ожидается, что запрос к packages.microsoft.com
будет игнорироваться, основываясь на вашем регулярном выражении. Тем не менее, вы увидели перехват этого запроса в журнале процесса mitmdump:
[11:01:02.996][127.0.0.1:56818] client connect
[11:01:03.034][127.0.0.1:56818] server connect packages.microsoft.com:443 (13.107.246.60:443)
127.0.0.1:56818: GET https://packages.microsoft.com/debian/11/prod/dists/bullseye/InRelease HTTP/2.0
Применение
-
Проверка регулярного выражения: Регулярное выражение
'^(.+\.)?microsoft\.com:443$'
может работать не так, как вы ожидаете. Оно предполагает, что любые поддоменыmicrosoft.com
должны игнорироваться. Убедитесь, что оно полноценно соответствует вашей задаче. Работу регулярного выражения можно протестировать в различных онлайн-средах для проверки соответствий (например, regex101.com). -
Версия ПО и зависимости: Совместимость версий может играют значительную роль. Вы используете mitmproxy версии 11.1.3, Python 3.13.2 и OpenSSL 3.4.1. Убедитесь, что подобная комбинация стабильна и не содержит известных багов, которые могли бы повлиять на работу proxy. В случае обнаружения известной проблемы, возможен откат до предыдущих стабильных версий.
-
Настройки сети и среды: Убедитесь, что параметры сетевых настройках вашего окружения соответствуют правилам маршрутизации и что нет каких-либо конфликтующих прокси или брандмауэров, которые могут неправильно обрабатывать правила исключений в mitmproxy.
-
Отладка: Включите подробные логи для анализа процесса работы mitmproxy. Параметр
--flow-detail 2
уже используется, но возможно, следует просмотреть более детальные системы логов в mitmproxy. -
Альтернативные подходы: Если проблема остаётся и блокируется функционирование рабочего процесса, возможно, стоит рассмотреть использование дополнительных или альтернативных инструментов для подобной задачи. Это может включать другие утилиты для работы с сетевым трафиком, которые могут работать в комбинации или заменять функциональность, предоставляемую mitmproxy.
Заключение
Решение проблемы с параметром --ignore-hosts
требует тщательной диагностики, которая включает проверку корректности использования регулярных выражений, совместимости используемого ПО и анализа конфигураций среды. В некоторых случаях обновление или замена программного обеспечения могут стать одним из решений проблемы. Проблемы этого рода демонстрируют важность соответствующего тестирования и настройки инструментов до их использования в критичных или важных задачах.