콘텐츠로 이동

재작성 규칙과 브레이크포인트

캡처가 “보는 것”이라면, 규칙과 브레이크포인트는 “바꾸는 것”입니다. Trace Eagle은 여러분을 트래픽의 주인으로 만들어 줍니다. 코드를 작성하지 않고도 요청을 바꾸고, 단순하고 직관적인 포인트 앤 클릭 규칙으로 수천 개의 플로우를 자동 재작성할 수 있습니다. 또는 브레이크포인트로 플로우를 하나씩 멈춰 편집할 수도 있습니다. 규칙으로 도저히 표현할 수 없는 복잡한 로직에 한해서만 스크립트 / 플러그인으로 넘어가면 됩니다.


1. 재작성 규칙 (단순한 포인트 앤 클릭, 자동 변경)

섹션 제목: “1. 재작성 규칙 (단순한 포인트 앤 클릭, 자동 변경)”

요청을 바꾸기 시작하는 가장 나쁜 방법은 스크립트를 작성하는 것입니다. 여기서는 그럴 필요가 없습니다. 치트시트에서 동작을 고르고 값을 채우면 그것이 곧 규칙입니다. 단순하고 직관적이며, 만드는 즉시 적용됩니다.

규칙은 한 줄에 하나씩, <match> <action>://<value> 형식입니다(예: *.example.com resHeaders://X-Debug: 1). 빈 줄과 # 주석은 무시되고, 각 줄은 개별로 검증되며, 변경 사항은 저장 즉시 적용됩니다. 규칙은 이름 붙인 그룹으로 정리하고 그룹 단위로 켜고 끌 수 있습니다. 인터페이스에는 클릭 가능한 치트시트가 함께 제공됩니다. 한 번 클릭하면 해당 예시가 삽입되고, 값만 편집하면 되니 외울 문법이 없습니다.

재작성 규칙: 왼쪽은 한 줄에 규칙 하나, 그룹과 주석 지원, 오른쪽은 클릭 가능한 동작 치트시트(리디렉션 / 목킹 / 헤더 편집 / 지문 / 브레이크포인트 등)

  • 정확한 도메인: traceeagle.com (경로 접두사 포함 가능 traceeagle.com/path)
  • 와일드카드 서브도메인: *.traceeagle.com (최상위 도메인과 모든 서브도메인 매칭)
  • 전체 URL에 대한 정규식: regex://…
  • 정확한 전체 URL: $https://host/path
  • 포트: :8080
  • 부정: 아무 매칭 앞에 !를 붙임

요청 방향

  • 리디렉션 / 전달: 접속할 대상 IP 변경(host), 다른 전체 URL로 매핑(map-remote, 로컬 개발 서버를 가리킬 수 있음), 상위 http/socks5 프록시로 경유, 또는 클라이언트의 네트워크 요청 특성을 표준 클라이언트의 것으로 복원(충실한 재현).
  • 가짜 데이터 목킹: mock://200 또는 mock://200|<body>, 서버에 접속하지 않고 미리 설정한 응답을 반환합니다. 프런트엔드가 백엔드 API를 기다리고 있을 때 구세주가 됩니다.
  • 요청 라인 / 헤더 편집: 메서드, User-Agent, Referer, Basic 인증, X-Forwarded-For, Content-Type / 문자셋, Cookie, 쿼리 파라미터 병합, URL 찾아 바꾸기.
  • 요청 본문 편집: 전체 교체 / 찾아 바꾸기 / 뒤에 추가 / 앞에 추가 / 로컬 파일로 덤프.

응답 방향

  • 상태 / 헤더 편집: 상태 코드 변경, 임의의 응답 헤더 추가·제거, Set-Cookie, 클릭 한 번으로 CORS 열기, 첨부 파일 다운로드 강제, 캐시 제어(캐시 비활성화 또는 max-age 설정), Cookie/압축/keep-alive 비활성화, 헤더 값 찾아 바꾸기.
  • 응답 본문 편집: 전체 교체 / 찾아 바꾸기 / 뒤에 추가 / 앞에 추가 / 얕은 JSON 병합.
  • 타입별 주입: Content-Type이 일치할 때만 HTML / JS / CSS에 스크립트, 스타일, 스니펫을 주입하거나 교체합니다.

네트워크와 프로토콜

  • 파일로 덤프: 요청 / 응답 본문뿐 아니라 원시 요청 / 응답 전체도 클릭 한 번으로 로컬 파일에 덤프하여 보관하거나 오프라인 분석할 수 있습니다.
  • 열악한 네트워크 시뮬레이션: 요청 / 응답 지연(밀리초), 대역폭 제한(2G / 3G / 4G 프리셋 제공).
  • WebSocket 프레임 재작성: 방향별(양방향 / 클라이언트에서 서버로 / 서버에서 클라이언트로) old=>new 치환.
  • 원시 TCP / UDP 재작성: HTTP가 아닌 바이트 스트림 / SOCKS5 UDP 데이터그램에 대해 방향별 치환.

규칙 값에는 ${url} ${host} ${port} ${method} ${status} ${now} ${random} ${randomUUID} ${req.headers.X} ${res.headers.X} 같은 동적 변수와, 사용자 지정 이름 값 {name}(공통 값을 한 번 정의하고 어디서나 참조)을 쓸 수 있습니다. 이름 값 {name}은 주로 요청 / 응답 재작성에 사용하고, WebSocket 프레임 재작성 치환 값은 ${...}를 지원합니다.


건별로 정밀하게 제어해야 하는 플로우에는 브레이크포인트를 사용하여 요청이 전송되기 전 또는 응답이 돌아오기 전에 멈추고 편집기를 띄웁니다.

  • 규칙으로 트리거: breakpoint://req|res|both 규칙으로 어떤 플로우를 가로챌지 정밀하게 지정합니다.
  • 전역 가로채기 스위치: 세션 전체에 대해 가로채기를 켠 다음, 필요하면 가로채기 필터 규칙(도메인 / 메서드 / 단계별 필터)으로 범위를 좁힙니다. 규칙이 없으면 모든 것이 가로채집니다.
  • 요청 단계: 메서드, URL(호스트는 URL을 따름), 헤더, 본문.
  • 응답 단계: 상태 코드, 응답 헤더, 응답 본문.
  • 바로 폐기: Abort는 이 요청 / 응답을 버립니다(클라이언트는 게이트웨이 오류를 받습니다).
  • 여러 히트에 걸린 플로우는 줄 서서 처리를 기다립니다. 각각 재개(Resume)하거나, 폐기(Abort)하거나, 한꺼번에 모두 재개할 수 있습니다. 오랫동안 처리되지 않은 플로우는 자동으로 변경 없이 재개되므로, 트래픽이 무한정 막히는 일은 없습니다.

3. 스크립트와 플러그인 (고급 자동화)

섹션 제목: “3. 스크립트와 플러그인 (고급 자동화)”

규칙으로 표현할 수 없는 로직은 스크립트나 플러그인에 넘깁니다.

  • JavaScript 스크립트: onRequest(req) / onResponse(resp)를 정의하고 필드를 직접 편집하면 적용됩니다. 내장 헬퍼로는 로깅, 다른 서비스로의 동기 외부 호출, 요청 간 데이터 보관(카운터 / 캐시된 토큰용), Base64 인코딩/디코딩 등이 있습니다.
  • HTTP 외부 플러그인: plugin://name 규칙으로 요청 / 응답을 여러분이 만든 플러그인 서비스에 넘겨 처리하게 하고(HTTP로 호출), 플러그인이 재작성된 내용을 반환합니다(또는 직접 목킹). 언어에 구애받지 않아 팀이 원하는 어떤 언어로든 사용자 지정 처리를 구현하기에 적합합니다.

플로우는 다음 순서로 통과합니다. 요청 규칙, 요청 스크립트, 요청 플러그인, 요청 브레이크포인트, 전달 / 목킹, 응답 규칙, 응답 스크립트, 응답 플러그인, 응답 브레이크포인트. 패턴은 단순합니다. 먼저 자동 규칙, 그다음 스크립트, 그다음 플러그인, 그리고 맨 마지막에야 브레이크포인트가 수동으로 개입하며, 각자 제 역할을 하면서 서로를 침범하지 않습니다.


프록시 캡처로 돌아가기 · 관련: 작성 및 재전송