
Терминальный HTTP-прокси-перехватчик с TUI для захвата, инспектирования и модификации запросов в реальном времени, а также Repeater для повторной отправки и настройки запросов.
Минимальный терминальный перехватывающий прокси для HTTP/HTTPS.
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
Возможности · Установка · Поддержка HTTPS · Использование · Как это работает
Roxy — это лёгкий перехватывающий прокси для HTTP и HTTPS с терминальным пользовательским интерфейсом (TUI), написанный на Rust. Он перехватывает, просматривает и изменяет запросы в реальном времени, прежде чем они достигнут сервера, прямо из вашего терминала. Это минималистичная, терминальная альтернатива Burp Suite для повседневного анализа трафика.
CONNECT, с автоматически генерируемыми сертификатами.$EDITOR.--host и --port, а также решите, какие хосты перехватывать или пропускать.Для сборки из исходного кода вам понадобится:
| Требование | Примечания |
|---|---|
| Rust 1.85 или новее | Проверьте с помощью rustc --version. |
| Компилятор C | gcc или clang. |
$EDITOR | Нужен только для функции редактирования запросов. |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
Бинарный файл будет доступен по пути target/release/roxy.
cargo install --git https://github.com/vid4l-07/Roxy.git
Бинарный файл будет доступен по пути ~/.cargo/bin/roxy.
[!note] Если включён HTTPS passthrough, поддержка HTTPS не требуется.
| Что | Расположение | Примечания |
|---|---|---|
| Сертификат и ключ CA | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | Создаются лениво, при первом перехвате HTTPS-запроса. |
| Конечный сертификат для каждого хоста | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | Выпускаются по требованию и кэшируются. Кэш очищается при генерации нового CA. |
Roxy генерирует самоподписанный CA с именем Roxy CA.
[!Warning] Каждый HTTPS-запрос будет завершаться ошибкой проверки, пока CA не будет признан доверенным на клиенте.
Установите ~/.config/roxyca.crt в вашем браузере или системе.
Вы также можете скачать его со встроенной веб-страницы по адресу http://roxy (или http://<host>:<port>).
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates.~/.config/roxy/ca.crt.Системное хранилище CA Для таких инструментов, как curl.
# Debian / Ubuntu
sudo cp ~/.config/roxy/ca.crt /usr/local/share/ca-certificates/roxy.crt
sudo update-ca-certificates
# Fedora / RHEL / Arch
sudo cp ~/.config/roxy/ca.crt /etc/pki/ca-trust/source/anchors/roxy.crt
sudo update-ca-trust extract
Чтобы удалить его, удалите файл и повторно выполните соответствующую команду.
rm -rf ~/.config/roxy
Roxy сгенерирует новый CA при следующем HTTPS-запросе и удалит все кэшированные конечные сертификаты. Вам придётся снова признать новый CA доверенным. Не забудьте удалить старый из браузера и системного хранилища.
| Параметр | Описание |
|---|---|
-h, --host <HOST> | Хост прослушивания. По умолчанию 127.0.0.1. |
-p, --port <PORT> | Порт прослушивания. По умолчанию 8080. |
--passthrough | Туннелировать HTTPS без расшифровки, для всех хостов. |
--passthrough-host <HOSTS> | То же, что --passthrough, но только для перечисленных хостов. |
--intercept-https <HOSTS> | Перехватывать эти хосты даже в режиме passthrough. |
--help | Вывести справочное сообщение. |
# Pass every host through untouched except the one you want to inspect
roxy --passthrough --intercept-https <HOSTS>
| Клавиша | Действие |
|---|---|
q | Выход |
Tab | Переключение между экранами Proxy и Repeater |
? | Открыть всплывающую справку для текущего экрана |
| Клавиша | Действие |
|---|---|
i | Переключить перехват ВКЛ/ВЫКЛ |
Enter | Переслать перехваченный запрос |
e | Редактировать запрос во внешнем редакторе |
u | Отменить редактирование |
U | Повторить редактирование |
r | Отправить запрос в Repeater |
↑/k | Прокрутить вверх |
↓/j | Прокрутить вниз |
| Клавиша | Действие |
|---|---|
Enter | Отправить текущий запрос |
e | Редактировать запрос во внешнем редакторе |
u | Отменить редактирование |
U | Повторить редактирование |
r | Переименовать текущую вкладку |
n | Следующая вкладка Repeater |
p | Предыдущая вкладка Repeater |
x | Закрыть текущую вкладку |
z | Переключить масштабирование на активной панели |
↑/k | Прокрутить вверх |
↓/j | Прокрутить вниз |
←/h / →/l | Переключить фокус между панелями Request и Response |
H | Уменьшить ширину панели Request |
L | Увеличить ширину панели Request |
Когда вы нажимаете e, необработанный запрос записывается во временный файл и открывается с помощью бинарного файла, указанного в $EDITOR. Отредактируйте его, сохраните и выйдите.
Изменённый запрос заменяет оригинал, а Content-Length пересчитывается автоматически.
127.0.0.1:8080 по умолчанию, настраивается с помощью --host и --port, и обрабатывает каждое в своей асинхронной задаче.CONNECT получает ответ 200 Connection Established, TLS завершается локально с сертификатом, выпущенным для запрошенного хоста, а расшифрованный запрос читается как обычный HTTP-запрос. Хосты, соответствующие параметрам passthrough, вместо этого перенаправляются на реальный сервер без завершения TLS.Host.tokio::mpsc, а соединение ожидает на канале oneshot, пока пользователь его не перешлёт. Запрос можно переслать как есть, сначала отредактировать или отправить в Repeater.webpki-roots для HTTPS), записывает запрос и передаёт необработанный ответ обратно клиенту.Enter, выбирая транспорт на основе протокола, с которым запрос был перехвачен, и показывает ответ рядом с запросом.TUI и прокси никогда не обмениваются состоянием напрямую. Они общаются только через каналы событий, поэтому интерфейс остаётся отзывчивым, пока запросы перехватываются.
Вклад всегда приветствуется. Если вы нашли ошибку или хотите помочь с новыми функциями, вы можете: