
Windows 시스템에서 네트워크 트래픽 가로채기, 분석 및 수정을 위해 설계된 헤드리스(headless) 방식의 스크립트 가능한 명령줄 기반 MITM 프록시입니다.

Windows 시스템에서 네트워크 트래픽 차단, 분석 및 수정을 위해 설계된 헤드리스(headless), 스크립트 가능한 CLI 기반 MITM 프록시입니다. 업계 표준 GUI 프록시와 유사하게 작동하지만 자동화 환경, 헤드리스 운영 및 개발 워크플로우와의 통합에 최적화되어 있습니다.
참고: Node.js로 구현된 독립형이며 의존성이 없는 도구입니다.
PacketPirate는 시스템 전체 네트워크 차단 도구입니다. Windows HTTP 프록시 설정을 활용하여 사용자 머신에서 실행 중인 모든 애플리케이션의 트래픽을 캡처할 수 있습니다—웹 브라우저(Chrome, Edge), CLI 도구(curl, git), 데스크톱 애플리케이션(Spotify, VS Code, Discord)을 포함합니다.
전역 시스템 차단: 시스템 프록시를 준수하는 모든 프로세스의 HTTP/HTTPS 트래픽을 캡처합니다.
프로세스 인식: 어떤 애플리케이션이 정확히 트래픽을 생성하는지 식별합니다.
동적 규칙 엔진: JSON을 통해 구성하여 일치하는 트래픽에 대해 특정 작업을 수행합니다(예: 토큰 추출, 요청 로깅).
전체 트래픽 로깅: 분석을 위해 전체 요청 및 응답 본문(HTML, JSON, Binary)을 덤프할 수 있습니다.
헤드리스 아키텍처: 전적으로 CLI에서 실행되며 백그라운드 서비스 및 자동화된 테스트 파이프라인에 적합합니다.
사용자 지정 인증서 관리: HTTPS 복호화를 위한 자체 서명 루트 CA 생성 및 신뢰 유틸리티를 포함합니다.
저장소를 클론하고 환경을 초기화합니다:
# 1. 로컬 SSL 인증서 생성
npm run setup
# 2. 생성된 루트 CA 신뢰
npm run trust
# 참고: 신뢰할 수 있는 루트 저장소에 인증서를 추가하려면 관리자 승인이 필요합니다.
프록시 서버를 시작합니다:
npm start
이 명령은 표준 CLI 인터페이스를 실행합니다.
대화형 메뉴는 다음 컨트롤을 제공합니다:
code.exe만 독점 모니터링).Authorization 헤더에서 Bearer 토큰을 휴리스틱하게 감지합니다.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를 사용하여 5년 동안 유효한 키 쌍을 생성합니다.src/certs/server.pfx(PKCS#12 형식)로 내보내집니다.npm run trust는 이 루트 CA를 Windows CurrentUser\Root 저장소에 주입합니다.
LocalMachine이 아닌 CurrentUser를 대상으로 하여 신뢰 범위를 사용자 프로필로 제한하여 시스템 전체 위험을 줄입니다.security.enterprise_roots.enabled)이 필요합니다.npm run untrust는 깨끗한 정리를 제공합니다.
FriendlyName("PacketPirateRoot")으로 인증서를 찾아 다른 사용자 인증서를 건드리지 않도록 합니다.이 프로젝트는 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

Node.js의 표준 http 모듈은 동일한 서버 인스턴스에서 CONNECT 메서드(HTTPS 터널에 사용)와 일반 HTTPS 트래픽을 쉽게 처리할 수 없습니다.
CONNECT 요청을 처리합니다. 단순한 TCP 파이프 역할을 합니다.netstat 핵)어떤 앱이 트래픽을 보내는지 어떻게 알 수 있을까요? TCP 패킷 자체에는 "프로세스 ID" 스티커가 없습니다.
netstat -ano를 호출하여 포트 54321을 소유한 PID를 찾습니다.데이터를 효율적으로 처리하기 위해 Node.js Streams를 사용합니다. 전체 10MB 응답이 다운로드될 때까지 기다리는 대신 스트림을 "분기"합니다:
PassThrough 스트림을 사용하여 수행되며 최소한의 추가 지연으로 실시간 모니터링이 가능합니다.GNU GPL v3.0