Начало работы
Использование
Опция | Пример | Описание |
---|---|---|
-p |
mitmproxy -p 8001 | Запустить прокси на порту 8001 |
-m |
mitmproxy -p 8001 -m reverse:http://127.0.0.1:4000 | Обратный прокси на порту 8001 к порту 4000 |
-w |
mitmproxy -p 8001 -w traffic.mitm | Транслировать потоки в файл по мере их поступления |
-r |
mitmproxy -r traffic.mitm | Считать потоки из файла |
-C |
mitmproxy -C traffic.mitm | Воспроизведение клиентских запросов из сохраненного файла |
-S |
mitmproxy -S traffic.mitm | Воспроизведение ответов сервера из сохраненного файла |
-s |
mitmproxy -s myScript.py | Выполнение скрипта |
-h |
mitmproxy -h | Быстрая справка по mitmproxy |
Движение
``markdown k Ctrl b ▲ ▲▲ │ ││ h ◀ ─── + ─── ▶ l ││ стр. │ ││ ▼ ▼▼ j Ctrl f / Пробел
---
| - | - |
|----------------------|-----------------------|
| `h`, `j`, `k`, `l` | Влево, Вниз, Вверх, Вправо |
| `Ctrl` `b` | Страница вверх |
| `Space` / `Ctrl` `f` | Страница вниз |
| `g` / `G` | Перейти к началу / концу |
| `Стрелки` | Вверх, Вниз, Влево, Вправо |
{.shortcuts}
### Копировать в буфер обмена
Синтаксис команды:
:export.clip format flow
----------------
Пример:
| Описание | Пример команды |
|--------------------------------|------------------------------------|
| 1. Копирование как команда curl | `:export.clip curl @focus` |
| 2. Копировать как команду httpie | `:export.clip httpie @focus` |
| 2. Копировать как raw | `:export.clip raw @focus` | 2.
| 2. Копировать как необработанный HTTP-запрос | `:export.clip raw_request @focus` |
| 2. Копирование в виде необработанного HTTP-ответа | `:export.clip raw_response @focus` |
{.style-list}
Экспорт потока в системный буфер обмена.
### Сохранить в файл
Синтаксис команды:
:export.file format flow path
----------------
Пример:
| Описание | Пример команды |
|------------------------------|----------------------------------------------------|
| 1. Экспорт в /tmp/a.curl | `:export.file curl @focus /tmp/a.curl` |
| 2. Экспорт в /tmp/a.httpie | `:export.file httpie @focus /tmp/a.httpie` |
| 2. Экспорт в /tmp/a.raw | `:export.file raw @focus /tmp/a.raw` | | 2.
| 2. Экспорт в /tmp/a.request | `:export.file raw_request @focus /tmp/a.request` |
| 2. Экспорт в /tmp/a.response | `:export.file raw_response @focus /tmp/a.response` |
{.style-list}
Экспорт потока в системный буфер обмена.
### Общие сочетания клавиш
| - | - |
|---------|------------------|
| `q` | Back / Exit |
| `z` | Очистить список потоков |
| `:` | Командная строка |
| `E` | Просмотр журнала событий |
| `O` | Просмотр параметров |
| `r` | Воспроизвести этот поток |
| `Tab` | Next |
| `Enter` | Select |
{.shortcuts}
### Глобальные сочетания клавиш
| - | - |
|----------------|---------------------------|
| `-` | Переход к следующему макету |
| `?` | Просмотр справки |
| `B` | Запуск подключенного браузера |
| `C` | Просмотр команд |
| | `I` | Переключение перехвата |
| `K` | Просмотр привязки клавиш |
| `P` | Просмотр деталей потока |
| `Q` | Немедленный выход |
| `W` | Поток в файл |
| `i` | Установить перехват |
| `Ctrl` `right` | Фокусировка на следующей панели разметки |
| `Shift` `tab` | Фокусировка следующей панели |
{.shortcuts}
### Поток (вид)
| - | - |
|------------|------------------------------|
| `A` | Возобновить все перехваченные потоки |
| `D` | Дублировать поток |
| `F` | Установить следующий фокус |
| `L` | Загрузить потоки из файла |
| `M` | Переключить просмотр отмеченных потоков |
| `S` | Запустить воспроизведение сервера |
| `U` | Снять все пометки |
| `V` | Вернуть изменения в этот поток |
| `X` | Убить этот поток |
| | `Z` | Очистить все потоки, которые не отображаются |
| `a` | Возобновить этот перехваченный поток |
| `b` | Сохранить тело ответа в файл |
| `d` | Удалить поток из просмотра |
| `e` | Экспортировать этот поток в файл |
| `f` | Установить фильтр просмотра |
| `m` | Переключить отметку на этот поток |
| `n` | Создать новый поток |
| `o` | Установить порядок списка потоков |
| `r` | Воспроизвести этот поток |
| `v` | Обратный порядок списка потоков |
| `w` | Сохранить список потоков в файл |
| `|` | Запустить сценарий для этого потока |
| `Ctrl` `l` | Отправить вырезки в буфер обмена |
{.shortcuts}
Mitmproxy Filter
---------------
### Фильтр
| - | - |
|-----|---------------------------------------|
| `f` | Установить фильтр представления _(на странице представления потока)_ |
{.shortcuts}
---
- [RegEX cheatsheet](/regex) _(cheatsheets.zip)_
Регекс в стиле Python может быть задан в виде строк с кавычками
### Операторы
| - | - |
|---------|-----------|
| `!` | unary not |
| `&` | и |
| `|` | или |
| `(...)` | группировка |
### Выражения {.row-span-2}
| - | - |
|----------------|------------------------------------------------------------|
| `~a` | Соответствие актива в ответе: CSS, Javascript, Flash, изображения. |
| | `~b` `regex` | Body |
| | `~bq` `regex` | Тело запроса |
| | `~bs` `regex` | Тело ответа |
| | `~c` `int` | Код ответа HTTP |
| `~d` `regex` | Домен |
| | `~dst` `regex` | Адрес назначения |
| `~e` | Ошибка соответствия |
| | `~h` `regex` | Заголовок |
| | `~hq` `regex` | Заголовок запроса |
| `~hs` `regex` | Заголовок ответа |
| `~http` | Соответствие потокам HTTP |
| `~m` `regex` | Метод |
| `~marked` | Подбор отмеченных потоков |
| | `~q` | Искать запрос без ответа |
| `~s` | Искать ответ |
| | `~src` `regex` | Искать адрес источника |
| `~t` `regex` | Заголовок типа содержимого |
| `~tcp` | Искать TCP-потоки |
| `~tq` `regex` | Заголовок типа содержимого запроса |
| | `~ts` `regex` | Заголовок типа содержимого ответа |
| `~u` `regex` | URL |
| `~websocket` | Соответствие потоков WebSocket (и потоков рукопожатия HTTP-WebSocket)|
### Селекторы потоков
Выражения
| - | - |
|-------------|----------------------------|
| `@all ` | Все потоки |
| | `@focus ` | Текущий сфокусированный поток |
| | `@shown ` | Все потоки, показанные в данный момент |
| | `@hidden ` | Все потоки, которые в данный момент скрыты |
| | `@marked` | Все отмеченные потоки |
| `@unmarked` | Все немаркированные потоки |
mitmproxy имеет набор удобных селекторов потоков, которые работают с текущим представлением
### Примеры
URL, содержащий "google.com"
google.com
Запросы, тело которых содержит строку "test"
~q ~b test
Все, кроме запросов с типом содержимого text/html:
!(~q & ~t “text/html”)
Замена всей GET-строки в запросе (для этого необходимо использовать кавычки):
“:~q ~m GET:.*:/replacement.html”
Скрипты Mitmproxy {.cols-2}
-------
### Пользовательский ответ
``python
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, # (необязательно) код состояния
b "Hello World", # (необязательное) содержимое
{ "Content-Type": "text/html"} # (необязательные) заголовки
)
Отправка ответа с прокси-сервера без передачи каких-либо данных на удаленный сервер
Добавить заголовок
``python 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() ]
Добавление HTTP-заголовка к каждому ответу
Также см.
-------
- [mitmproxy addons](https://github.com/mitmproxy/mitmproxy/tree/master/examples/addons) _(github.com)_
- [mitmproxy docs](https://docs.mitmproxy.org/) _(mitmproxy.org)_