
트래픽 캡처를 통해 REST API를 자동으로 리버스 엔지니어링
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
mitmproxy 캡처를 OpenAPI 3.0 사양으로 자동 변환하는 도구입니다. 즉, 앱을 실행하고 트래픽을 캡처하기만 하면 REST API를 자동으로 리버스 엔지니어링할 수 있습니다.
🆕 새 기능!
브라우저 DevTools에서 내보낸 HAR 파일 처리 지원이 추가되었습니다. 자세한 내용은 사용법 - HAR을 참조하세요.
먼저 python3와 pip3가 필요합니다.
$ pip install mitmproxy2swagger
# ... 또는 ...
$ pip3 install mitmproxy2swagger
# ... 또는 ...
$ git clone [email protected]:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
그런 다음 저장소를 클론하고 아래 예제와 같이 mitmproxy2swagger를 실행하세요.
HTTP 트래픽을 검사하여 사양을 생성하려면 다음 단계를 따르세요.
mitmproxy 도구를 사용하여 트래픽을 캡처합니다. 개인적으로는 mitmproxy에 내장된 웹 인터페이스인 mitmweb을 사용하는 것을 추천합니다.
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
중요
클라이언트가 mitmproxy가 노출하는 프록시를 사용하도록 구성하는 방법은 mitmproxy 문서를 참조하세요.
트래픽을 흐름 파일로 저장합니다.
mitmweb에서는 "File" 메뉴의 "Save" 옵션을 사용하여 저장할 수 있습니다:

mitmproxy2swagger의 첫 번째 패스를 실행합니다:
$ mitmproxy2swagger -i <mitmproxy_flow_경로> -o <출력_스키마_경로> -p <api_접두사>
# ... 또는 ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <mitmproxy_flow_경로> -o <출력_스키마_경로> -p <api_접두사>
기존 스키마를 사용할 수 있으며, 이 경우 기존 스키마가 새 데이터로 확장됩니다. 여러 번 실행하여 다른 흐름 캡처를 추가할 수 있으며, 캡처된 데이터는 안전하게 병합됩니다.
<api_접두사>는 리버스 엔지니어링하려는 API의 기본 URL입니다. mitmproxy에서 요청을 관찰하여 이 값을 알아내야 합니다.
예를 들어 앱이 다음과 같은 요청을 보낸 경우:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
접두사는 https://api.example.com/v1일 가능성이 높습니다.
첫 번째 패스를 실행하면 스키마 파일에 다음과 같은 섹션이 생성됩니다:
x-path-templates:
# 엔드포인트를 생성하려면 ignore: 접두사를 제거하세요.
# 위쪽에 가까운 줄이 우선 적용되며, 매칭은 탐욕적입니다.
- ignore:/addresses
- ignore:/basket
- ignore:/basket/add
- ignore:/basket/checkouts
- ignore:/basket/coupons/attach/{id}
- ignore:/basket/coupons/attach/104754
브라우저 DevTools에서 트래픽을 캡처하고 내보냅니다.
브라우저 DevTools의 네트워크 탭에서 "Export HAR" 버튼을 클릭합니다.

mitmproxy 덤프와 동일한 방식으로 진행합니다. mitmproxy2swagger가 HAR 파일을 자동으로 감지하여 처리합니다.
예제를 참조하세요. 생성된 스키마와 (redoc-cli를 통해 생성된) 문서 HTML 파일이 있습니다.
생성된 HTML 파일을 확인하세요.
이 프로젝트는 다음을 사용합니다:
의존성 설치:
uv sync
린터 실행:
uv run prek run --all-files
prek 훅 설치:
uv run prek install
테스트 실행:
uv run pytest
커버리지와 함께 테스트 실행:
uv run pytest --cov=mitmproxy2swagger
MIT
텍스트 편집기로 스키마 파일을 열고, 생성하려는 경로에서 ignore: 접두사를 제거해야 합니다. 경로에 나타나는 매개변수도 조정할 수 있습니다.
mitmproxy2swagger의 두 번째 패스를 실행합니다:
$ mitmproxy2swagger -i <mitmproxy_flow_경로> -o <출력_스키마_경로> -p <api_접두사> [--examples]
# ... 또는 ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <mitmproxy_flow_경로> -o <출력_스키마_경로> -p <api_접두사> [--examples]
동일한 스키마 파일로 명령을 두 번째 실행합니다. 이전에 편집한 줄을 인식하여 엔드포인트 설명을 생성합니다.
mitmproxy2swagger는 기존 엔드포인트 설명을 덮어쓰지 않습니다. 덮어쓰려면 두 번째 패스를 실행하기 전에 해당 설명을 삭제하면 됩니다.
--examples를 전달하면 요청과 응답에 예제 데이터가 추가됩니다. 이 옵션을 사용할 때는 주의하세요. 스키마에 토큰, 비밀번호, 개인 정보 등의 민감한 데이터가 포함될 수 있습니다.
--headers를 전달하면 요청과 응답에 헤더 데이터가 추가됩니다. 이 옵션을 사용할 때는 주의하세요. 스키마에 토큰, 비밀번호, 개인 정보 등의 민감한 데이터가 포함될 수 있습니다.