
Безголовый, скриптуемый MITM-прокси на основе командной строки, предназначенный для перехвата, анализа и модификации сетевого трафика в Windows-системах.

Безголовый, скриптуемый MITM-прокси с интерфейсом командной строки, предназначенный для перехвата, анализа и модификации сетевого трафика в системах Windows. Он работает аналогично стандартным GUI-прокси, но оптимизирован для сред автоматизации, работы без графического интерфейса и интеграции с процессами разработки.
Примечание: Это автономный инструмент без зависимостей, реализованный на Node.js.
PacketPirate — это инструмент перехвата сетевого трафика в масштабе всей системы. Используя настройки HTTP-прокси Windows, он может перехватывать трафик любого приложения, запущенного на вашем компьютере — включая веб-браузеры (Chrome, Edge), CLI-инструменты (curl, git) и настольные приложения (Spotify, VS Code, Discord).
Глобальный перехват на уровне системы: перехватывает HTTP/HTTPS-трафик любого процесса, использующего системный прокси.
Привязка к процессам: позволяет точно определить, какое приложение генерирует трафик.
Динамический движок правил: настраивается через JSON для выполнения конкретных действий с соответствующим трафиком (например, извлечение токенов, журналирование запросов).
Полное журналирование трафика: способен сохранять полные тела запросов и ответов (HTML, JSON, бинарные данные) для анализа.
Архитектура без графического интерфейса: полностью работает из CLI, подходит для фоновых служб и конвейеров автоматизированного тестирования.
Управление пользовательскими сертификатами: включает утилиты для генерации самозаверяющих корневых CA и добавления их в доверенные для расшифровки HTTPS.
Клонируйте репозиторий и инициализируйте окружение:
# 1. Generate local SSL certificates
npm run setup
# 2. Trust the generated Root CA
npm run trust
# Note: Requires administrative approval to add the certificate to the Trusted Root Store.
Запустите прокси-сервер:
npm start
Это запускает стандартный CLI-интерфейс.
Интерактивное меню предоставляет следующие элементы управления:
code.exe).Bearer-токенов в заголовках Authorization.jsonl-файлы журналов.Логика перехвата определяется в config/rules.json. Этот файл позволяет сохранять настройки обработки трафика.
Схема:
{
"rules": [
{
"name": "Description of rule",
"host": "hostname.match",
"urlPattern": "regex_pattern",
"action": "log | save_token",
"outputFile": "path/to/output.txt",
"tokenFilter": "regex_filter"
}
]
}
Пример:
{
"rules": [
{
"name": "Test API",
"host": "jsonplaceholder.typicode.com",
"action": "save_token",
"outputFile": "test_tokens.txt"
}
]
}
Инструмент использует архитектуру с двумя серверами:
CONNECT и выполняет фильтрацию хостов.EADDRINUSE и увеличивает номер порта, пока не найдёт свободный порт.SIGINT/SIGTERM для гарантированного отката настроек прокси при выходе, предотвращая проблемы с сетевым подключением.Инструмент использует модель с двумя сертификатами для перехвата HTTPS:
npm run setup создает самозаверяющий корневой CA (PacketPirateRoot).
New-SelfSignedCertificate из PowerShell для генерации пары ключей сроком действия 5 лет.src/certs/server.pfx (формат PKCS#12) с паролем "headless".npm run trust внедряет этот корневой CA в хранилище Windows CurrentUser\Root.
CurrentUser, а не на LocalMachine, мы ограничиваем радиус доверия вашим профилем пользователя, снижая общесистемный риск.security.enterprise_roots.enabled), чтобы он учитывал хранилище доверия Windows.npm run untrust обеспечивает корректное удаление.
Этот проект — практический пример системного программирования с использованием Node.js. Он выходит за рамки типичных веб-серверов и взаимодействует с операционной системой и сетевым стеком на более низком уровне.
participant App as Application (VS Code)
participant OS as Windows OS
participant Proxy as Proxy Server
participant MITM as MITM Server
participant Web as Internet
Note over App,Proxy: 1. Plain HTTP Tunneling
App->>Proxy: CONNECT google.com:443
Proxy-->>App: 200 Connection Established
Note over Proxy,MITM: 2. The "Hand-Off" Trick
Proxy->>MITM: Pipe socket data (raw encrypted bytes)
Note over App,MITM: 3. TLS Handshake and Decryption
MITM-->>App: ServerHello (signed by local root CA)
App->>MITM: Encrypted request (GET /)
Note over MITM: 4. Interception Logic
MITM->>MITM: Decrypt → Inspect headers → Log
Note over MITM,Web: 5. Upstream Forwarding
MITM->>Web: New HTTPS request (GET /)
Web-->>MITM: Response
MITM-->>App: Response

Стандартный модуль http в Node.js не может легко обрабатывать метод CONNECT (используемый для HTTPS-туннелей) и обычный HTTPS-трафик на одном экземпляре сервера.
CONNECT. Выступает в роли простого TCP-канала.netstat)Откуда мы знаем, какое приложение отправляет трафик? Сами TCP-пакеты не содержат «наклейки» с идентификатором процесса.
netstat -ano, чтобы узнать, какому PID принадлежит порт 54321.Мы используем потоки Node.js для эффективной обработки данных. Вместо того чтобы ждать полной загрузки ответа размером 10 МБ перед его отображением, мы «разветвляем» поток:
PassThrough, что позволяет вести мониторинг в реальном времени с минимальной дополнительной задержкой.GNU GPL v3.0
FriendlyName ("PacketPirateRoot"), что гарантирует, что мы никогда не затрагиваем другие сертификаты пользователя.