- Что такое Mitmproxy
- Установка Mitmproxy
- Установка на macOS
- Установка на Linux
- Установка на Windows
- Другие способы установки
- Использование Docker-образов
- Использование Mitmproxy
- Основные команды
- Управление перемещением
- Копирование в буфер обмена
- Сохранение в файл
- Основные клавиши
- Глобальные горячие клавиши
- Просмотр потоков
- Фильтры в Mitmproxy
- Скрипты в Mitmproxy
- Заключение
Mitmproxy — это бесплатный и открытый интерактивный HTTPS-прокси. В этой статье покажу, как установить и использовать Mitmproxy. Это будет больше шпаргалка, чем гайд, чтобы у вас всегда было под рукой описание базовых операций и функций.
Еще по теме: Работа с Proxy в Python
Что такое Mitmproxy
Это набор инструментов для перехвата и модификации HTTP/HTTPS-трафика в реальном времени, поддерживающий также работу с WebSocket. Основная функция заключается в том, что он позволяет перехватывать и изменять запросы и ответы прямо на лету, что делает его мощным инструментом для тестирования и анализа сетевого трафика.
Возможности:
- Перехват и модификация HTTP и HTTPS запросов и ответов в реальном времени
- Сохранение полных HTTP-сессий для последующего воспроизведения и анализа
- Повторное воспроизведение клиентских запросов
- Повторное воспроизведение ответов сервера из ранее записанных сессий
- Работа в режиме реверсивного прокси для перенаправления трафика на указанный сервер
- Прозрачный прокси на macOS и Linux
- Возможность написания пользовательских скриптов для изменения HTTP-трафика на Python
- Генерация SSL/TLS-сертификатов для перехвата трафика на лету
Mitmproxy предоставляет несколько интерфейсов для работы с основным функционалом. Под Mitmproxy обычно подразумевают любой из этих трех инструментов, каждый из которых использует один и тот же прокси-движок.
- Mitmproxy — консольный инструмент для интерактивного перехвата и модификации HTTP-трафика. Он поддерживает работу с HTTP/1, HTTP/2 и WebSocket. Тулза позволяет сохранять и модифицировать трафик в режиме реального времени через текстовый интерфейс.
- Mitmweb — веб-интерфейс для работы с Mitmproxy. Этот инструмент позволяет визуализировать и управлять HTTP-трафиком через браузер.
- Mitmdump — это версия для командной строки. Его можно сравнить с tcpdump, но для HTTP-трафика. Mitmdump позволяет записывать и анализировать трафик через командную строку, что делает его удобным для автоматизации задач и работы с большим объемом данных.

Тулза позволяет детально изучать и модифицировать HTTP-трафик прямо из консоли. В отличие от Mitmdump, все сетевые потоки сохраняются в оперативной памяти, что делает его идеальным для работы с небольшими выборками трафика, где нужно манипулировать запросами и ответами в реальном времени.
Установка Mitmproxy
В этом разделе я подробно опишу, как установить тулзу на различные операционные системы, такие как macOS, Linux, Windows, а также расскажу про расширенные способы установки, включая использование PyPI и Docker.
Установка на macOS
Рекомендуемый способ установки на macOS — использование Homebrew. Чтобы установить mitmproxy, выполните следующую команду в терминале:
1 |
brew install mitmproxy |
Если вы предпочитаете не использовать Homebrew, вы можете скачать автономные бинарные файлы с официального сайта mitmproxy.org.
Для систем на базе Apple Silicon требуется Rosetta.
Установка на Linux
Лучший способ установить на Linux — это скачать бинарные файлы с сайта.
Некоторые дистрибутивы Linux предоставляют пакеты Mitmproxy в своих репозиториях (например, Arch Linux, Debian, Ubuntu, Kali Linux, OpenSUSE и другие). Однако разработчики не занимаются поддержкой этих пакетов, и они часто могут отставать от последней версии. Если у вас возникнут проблемы с такими пакетами, обратитесь напрямую к поддерживающим их репозиториям.
Установка на Windows
Для установки на Windows загрузите установочный файл с сайта. Также доступны автономные бинарные файлы, но они могут запускаться медленнее из-за необходимости извлечения некоторых файлов в временные директории при первом запуске.
После установки программы mitmproxy, mitmdump и mitmweb будут добавлены в переменную окружения PATH, и вы сможете запускать их из командной строки.
Установите Windows Terminal для улучшения отображения интерфейса консоли.
Все инструменты Mitmproxy также поддерживаются в WSL (Windows Subsystem for Linux). Установив WSL, следуйте инструкциям по установке для Linux.
Другие способы установки
Если вы хотите установить напрямую из исходного кода или с основной ветки GitHub, обратитесь к файлу CONTRIBUTING.md на странице проекта в GitHub.
Если ваши дополнения для требуют установки дополнительных Python-пакетов, можно установить Mitmproxy через PyPI.
Хотя существует множество способов установки, я рекомендую использовать pipx. Это позволит вам легко управлять зависимостями для разных проектов.
- Установите последнюю версию Python (требуется версия 3.10 или выше).
- Установите pipx.
- Выполните команду:
1 |
pipx install mitmproxy |
Чтобы установить дополнительные пакеты для Python, выполните:
1 |
pipx inject mitmproxy <название-пакета> |
Использование Docker-образов
Инструмент также доступен в виде официальных Docker-образов, которые можно найти на DockerHub. Это особенно удобно для работы в контейнерах, когда вы хотите изолировать окружение.
Инструменты Mitmproxy распространяются в виде готовых пакетов, которые можно найти на официальном сайте проекта. Там же можно найти подробную документацию и инструкции по установке.
Исходный код проекта доступен в репозитории GitHub, что позволяет разработчикам вносить изменения и улучшения, а также создавать свои кастомные скрипты для работы с трафиком.
Использование Mitmproxy
Основные команды
Запустить прокси на порту 8001:
1 |
mitmproxy -p 8001 |
Запустить реверсивный прокси на порту 8001 с перенаправлением на порт 4000:
1 |
mitmproxy -p 8001 -m reverse:http://127.0.0.1:4000 |
Записать потоки в файл при поступлении:
1 |
mitmproxy -p 8001 -w traffic.mitm |
Прочитать потоки из файла:
1 |
mitmproxy -r traffic.mitm |
Повторить запросы клиента из сохраненного файла:
1 |
mitmproxy -C traffic.mitm |
Повторить ответы сервера из сохраненного файла:
1 |
mitmproxy -S traffic.mitm |
Выполнить скрипт:
1 |
mitmproxy -s myScript.py |
Получить быструю справку:
1 |
mitmproxy -h |
Управление перемещением
1 2 3 4 5 |
h, j, k, l — перемещение влево, вниз, вверх, вправо Ctrl-b — страница вверх Space / Ctrl-f — страница вниз g / G — перейти в начало / конец Стрелки — вверх, вниз, влево, вправо |
Копирование в буфер обмена
Команды для экспорта текущего потока в системный буфер обмена:
Копирование в curl:
1 |
:export.clip curl @focus |
Копирование в httpie:
1 |
:export.clip httpie @focus |
Копирование как raw:
1 |
:export.clip raw @focus |
Копирование HTTP-запроса:
1 |
:export.clip raw_request @focus |
Копирование HTTP-ответа:
1 |
:export.clip raw_response @focus |
Сохранение в файл
Команды для сохранения потока в файл:
Экспорт в curl:
1 |
:export.file curl @focus /tmp/a.curl |
Экспорт в httpie:
1 |
:export.file httpie @focus /tmp/a.httpie |
Экспорт как raw:
1 |
:export.file raw @focus /tmp/a.raw |
Экспорт HTTP-запроса:
1 |
:export.file raw_request @focus /tmp/a.request |
Экспорт HTTP-ответа:
1 |
:export.file raw_response @focus /tmp/a.response |
Основные клавиши
1 2 3 4 5 6 7 8 |
q — назад / выход z — очистить список потоков : — командная строка E — просмотр лога событий O — просмотр опций r — повторить этот поток Tab — следующий элемент Enter — выбрать элемент |
Глобальные горячие клавиши
1 2 3 4 5 6 7 8 9 10 11 12 |
- — смена раскладки ? — помощь B — запуск встроенного браузера C — просмотр команд I — переключить перехват K — просмотр горячих клавиш P — просмотр деталей потока Q — немедленный выход W — запись в файл i — установить перехват Ctrl-вправо — перейти к следующей панели Shift-Tab — фокус на следующей панели |
Просмотр потоков
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
A — возобновить все перехваченные потоки D — дублировать поток F — установить следование фокуса L — загрузить потоки из файла M — переключить отображение помеченных потоков S — начать воспроизведение серверных ответов U — снять все метки V — отменить изменения в потоке X — завершить поток Z — очистить все неотображаемые потоки a — возобновить этот поток b — сохранить тело ответа в файл d — удалить поток из просмотра e — экспортировать поток в файл f — установить фильтр просмотра m — пометить поток n — создать новый поток o — установить порядок списка потоков r — воспроизвести этот поток v — изменить порядок списка потоков w — сохранить список потоков в файл | — запустить скрипт для этого потока Ctrl-l — отправить вырезки в буфер обмена |
Фильтры в Mitmproxy
Для просмотра потоков можно использовать фильтры. Например:
URL, содержащий «google.com»:
1 |
google\.com |
Запросы, в теле которых содержится строка «test»:
1 |
~q ~b test |
Все, кроме запросов с типом контента text/html:
1 |
!(~q & ~t "text/html") |
Заменить строку в GET-запросе:
1 |
":~q ~m GET:.*:/replacement.html" |
Скрипты в Mitmproxy
Пример скрипта, который отправляет ответ без обращения к удаленному серверу:
1 2 3 4 5 6 7 8 9 10 |
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if flow.request.pretty_url == "http://example.com/path": flow.response = http.HTTPResponse.make( 200, # (optional) status code b"Hello World", # (optional) content {"Content-Type": "text/html"} # (optional) headers ) |
Пример скрипта, добавляющего HTTP-заголовок к каждому ответу:
1 2 3 4 5 6 7 8 9 10 11 12 |
class AddHeader: def __init__(self): self.num = 0 def response(self, flow): self.num = self.num + 1 flow.response.headers["count"] = str(self.num) addons = [ AddHeader() ] |
Заключение
Теперь у вас есть удобная шпаргалка для работы с Mitmproxy, которая поможет его эффективно использовать для анализа HTTPS-трафика.
ПОЛЕЗНЫЕ ССЫЛКИ: