Привет! Не так давно мне понадобилось прослушать http трафик одного
ресурса в linux. Сначала я хотел использовать tcpdump, но трафик передавался через https. Мне нужно было что то простое, легкое в установке, но в тоже время подходящее под мои задачи. Перерыв интернет в поиске доступного решения я наконец нашел то что мне нужно — это mitmproxy. Аббревиатура «mitm» означает «человек посередине» — это вид атаки, когда все запросы между клиентом и сервером проходят через стороннее ПО, которое встраивается между клиентом и сервером и прослушивает весь проходящий трафик. Mitmproxy умеет прослушивать http и https трафик в linux, а так же обладает различными полезными функциями.
Установка mitmproxy в ubuntu
sudo apt-get install mitmproxy
Настройка mitmproxy в ubuntu
Перед запуском mitmproxy необходимо настроить браузер, или систему, указав в их настройках порт mitmproxy. Объяснять как это сделать в этой статье считаю лишним, но по браузеру chromium кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:
Пришлось править конфиг файл chromium. Для этого пришлось отредактировать файл /etc/chromium-browser/default, добавив туда параметр:
CHROMIUM_FLAGS="-proxy-server=адрес:порт"
и после перезапустить браузер.
В моем случае mitmproxy установлен на локальный компьютер, то есть в поле «адрес» нужно будет прописать адрес локального хоста 127.0.0.1.
Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.
Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:
mitmproxy
По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:
mitmproxy -p 3000
Мониторинг http трафика
После запуска mitmproxy попробуйте открыть какой нибудь сайт в браузере, например webistore.ru. Если вы все правильно настроили, то в терминале вы должны увидеть это:
После запроса к сайту, в mitmproxy отобразится список всех загруженных с сайта данных, т. е. html код страницы сайта, картинки, java скрипты и другое. Для перемещения между элементами списка используйте стрелки на клавиатуре вверх и вниз. Например, на скриншоте выше выбран первый элемент списка, это видно по желтой стрелке слева от элемента. Каждый элемент списка — это отдельный http поток. У каждого http потока отображается его url, код статуса и тип контента, по которому можно определить его содержимое, например у первого http потока тип контента text/html, это означает, что он отображает html код страницы. Каждый http поток можно просматривать подробно. Для этого нужно нажать enter.
Давайте на примере просмотрим подробные сведения о первом http потоке — главной странице сайта webistore.ru. Нажав enter мы увидим данные об http запросе:
В этом окне отображены http заголовки запроса, а так же тело запроса, если оно есть. Для того, чтобы посмотреть данные http ответа, нужно нажать клавишу tab. Отобразится все содержимое http ответа — http заголовки и тело ответа.
Все данные об http потоке (http заголовки, тело запроса/ответа) прямо оттуда можно сохранить в файл, нажав комбинацию shift+w, но есть один ньюанс — если http ответ пришел в gzip, то он и сохраниться в gzip. Чтобы сохранить http поток как обычный текст, во вкладке http ответа — response, нажмите клавишу z, тогда строка content-encoding исчезнет из списка http заголовков ответа, и поток можно будет сохранить в обычном текстовом формате:
При сохранении, в файл записываются все данные об http потоке, то есть заголовки http запроса, заголовки http ответа, тело запроса и тело ответа. Если путь к файлу не указан явно, по умолчанию файл сохраняется в домашний каталог пользователя. Чтобы вернуться обратно к списку всех http потоков, нужно нажать клавишу q, для очистки списка http потоков нужно нажать комбинацию клавиш shift+c. Для просмотра других горячих клавиш в mitmproxy нажмите клавишу «?».
Мониторинг https трафика с помощью mitmproxy
С мониторингом http трафика через mitmproxy мы разобрались, но как быть с https трафиком, ведь для того чтобы прослушать https трафик, mitmproxy использует свой https сертификат. Плохо это тем, что при обращении к сайту по https, браузер будет выдавать предупреждение безопасности, и при этом не все сайты можно будет открыть. Это можно исправить, добавив сертификат mitmproxy в список доверенных сертификатов браузера. Сертификат mitmproxy находится в папке .mitmproxy в домашнем каталоге.
Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:
Далее открываем вкладку «Центры сертификации»:
Внизу в этой же вкладке нажимаем кнопку «импорт»:
Во вновь открывшемся окне выбираем домашний каталог, в нем открываем папку .mitmproxy и выбираем файл «mitmproxy-ca.pem»:
Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.
После выбора сертификата должно появиться окно, поставьте галочку напротив фразы «доверять этому сертификату при идентификации сайтов» и нажмите «ОК»:
Теперь попробуйте зайти на https сайт, предупреждение должно исчезнуть. Все, на этом настройка mitmproxy для https завершена.
В заключение хочу сказать, что mitmproxy может не только мониторить http и https трафик, но и модифицировать http запросы, посылать их серверу и получать ответы. Подробнее об этой и других функциях вы можете узнать нажав на клавишу «?» в главном окне программы, либо в окне подробной информации о http потоке.
Отличная статья)
Как мне настроить автоматические ответы на запросы?
То есть чтобы каждый раз одни и те же не редактировать