Простой прокси для записи веб-транзакции

Вопрос или проблема

Я ищу простой прокси для Linux/Ubuntu, единственная цель которого – записывать запросы и ответы из HTTP-транзакции.

Я пишу приложение, которое не будет работать в веб-браузере, но будет общаться с веб-сервером. Я хочу имитировать, чтобы узнать, как правильно отправить запрос на мой веб-сервер, изучая действительную транзакцию между веб-браузером и веб-сервером.

Это приложение будет работать на Arduino, и эта программа будет написана на C, поэтому я не могу полагаться на сложные библиотеки и высокоуровневые инструменты, такие как curl или python с BeautifulSoup, например. Представьте себе это как крошечный HTTP-браузер, который не отображает HTML-код, а только отправляет запросы и понимает ответ.

Мне удалось использовать netcat в режиме прослушивания, чтобы захватывать данные, отправляемые браузером, поэтому мое приложение уже может отправлять что-то подобное, но у меня проблемы с тем, чтобы узнать, каков правильный ответ, который возвращает веб-сервер. Мое приложение должно понимать, что происходит, и делать следующий шаг.

Я использую Postman для отправки запросов. Postman замечательно подходит для этого. Проблема с Postman в том, что я не могу просмотреть ответ в виде необработанных данных. Он дает мне тело ответа, но не заголовок ответа.

Я ищу прокси, который может выводить необработанные данные где-то, как запросы, так и ответы, с полным заголовком и телом, как необработанные данные.

Я хотел бы видеть что-то вроде этого:

PUT /testAuth.php HTTP/1.1
Authorization: Basic Y291cmFnZTpkb2c=
User-Agent: PostmanRuntime/7.15.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 7a4c180f-d893-4e7d-8375-a4dfd7b5663e
Host: localhost:80
accept-encoding: gzip, deflate
content-length: 0
Connection: keep-alive

HTTP/1.1 200 OK
Date: Thu, 04 Jul 2019 20:24:08 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 36
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

<h1>Здравствуйте, аутентифицированный пользователь.</h1>

Я думаю, что понимание всего HTTP-протокола путем чтения спецификации протокола займет очень много времени, прежде чем я смогу это сделать самостоятельно. Я думаю, что могу сэкономить время, просто имитируя GET/PUT/POST запрос, отправленный Postman, и увидев, что я должен ожидать в ответе.

Итак, я подумал о прокси, который может выводить как запрос, так и ответ и использовать эту информацию как шаблон для построения моих собственных запросов и парсинга ответа.

Спасибо заранее.

PS: В данный момент я использую telnet для общения с браузером и получения ответа. Проблема в том, что мне нужно копировать запрос откуда-то и вставлять его в telnet. А затем я получаю ответ, и соединение закрывается. Это работает, в каком-то роде. Но я хочу использовать Postman для создания моих запросов и получения ответа, а детали видеть в другом месте.

Я нашел mitmproxy (https://mitmproxy.org/), который отлично подошел для инспекции http-потока!

С наилучшими пожеланиями,

Ответ или решение

Для записи HTTP-транзакций на вашем Linux/Ubuntu устройстве можно воспользоваться mitmproxy, который обеспечивает все необходимые функции для анализа HTTP-запросов и ответов. Вот подробная инструкция, как это сделать.

Установка mitmproxy

  1. Установка mitmproxy:
    Вы можете установить mitmproxy с помощью пакетного менеджера apt. Для этого выполните следующую команду в терминале:

    sudo apt update
    sudo apt install mitmproxy
  2. Запуск mitmproxy:
    После установки вы можете запустить mitmproxy в терминале следующим образом:

    mitmproxy --mode transparent

    Параметр --mode transparent позволяет использовать mitmproxy как прозрачный прокси, что позволяет вам захватывать данные без необходимости настройки браузера.

Настройка системы

Чтобы перенаправить HTTP-трафик через mitmproxy, необходимо изменить настройки вашего устройства или приложения:

  1. Изменение конфигурации приложения:
    Если вы используете Postman или другое приложение, убедитесь, что оно настроено на использование mitmproxy в качестве прокси. Вам нужно указать адрес http://127.0.0.1:8080 в настройках прокси.

  2. Сертификация:
    Для захвата HTTPS-трафика вам нужно установить сертификат mitmproxy. Запустите mitmproxy и перейдите по адресу http://mitm.it в вашем браузере, это позволить вам скачать и установить сертификат.

Анализ HTTP-транзакций

После настройки mitmproxy, вы сможете видеть все HTTP-запросы и ответы, отправляемые через Postman или любое другое приложение, которое использует прокси. Каждый запрос и ответ будут отображаться в консоли mitmproxy в своем исходном виде, включая заголовки и тело.

Примеры вывода

Вам нужно будет искать похожие на приведенные ниже записи:

PUT /testAuth.php HTTP/1.1
Authorization: Basic Y291cmFnZTpkb2c=
User-Agent: PostmanRuntime/7.15.0
Accept: */*
Host: localhost:80
Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 36

<h1>Hello, Authenticated User.</h1>

Дополнительные функции

mitmproxy предоставляет множество возможностей, включая фильтрацию запросов, сохранение сессий, автоматизацию и многое другое. Ознакомьтесь с его документацией на официальном сайте mitmproxy для получения информации о дополнительных параметрах и командах.

Заключение

Используя mitmproxy, вы сможете эффективно записывать, анализировать и учить правильные HTTP-запросы для вашей C-программы на Arduino. Это поможет вам избежать длиного изучения спецификаций HTTP и сэкономит время на разработку вашего приложения.

Оцените материал
Добавить комментарий

Капча загружается...