Skip to content
playokPublic

About

간단한 Packet Proxy

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

PacketDup

TCP/UDP 패킷을 수신하여 원본 목적지로 전달하면서 동시에 지정된 여러 목적지로 복제하는 프록시 유틸리티

주요 기능

  • TCP/UDP 지원: 두 프로토콜 모두 지원
  • 패킷 미러링: 원본 목적지 전달 + 다중 복제 대상으로 동시 전송
  • 웹 UI: 다이어그램 기반 노드-엣지 연결로 직관적인 규칙 설정
  • 실시간 모니터링: 트래픽 통계 및 연결 상태 확인
  • 다크/라이트 테마: 사용자 환경에 맞는 테마 선택
  • 다국어 지원: 한국어(기본), 영어 지원

스크린샷

PacketDup Web UI

다이어그램 기반 규칙 편집기 - Listen, Target, Mirror 노드를 연결하여 패킷 미러링 규칙 설정

빌드

# 메인 프록시 빌드
go build -o packetDup .

# 테스트 유틸리티 빌드
go build -o sender ./cmd/sender
go build -o receiver ./cmd/receiver

사용법

PacketDup 프록시

# 데몬 모드로 시작
./packetDup start

# 데몬 중지
./packetDup stop

# 데몬 상태 확인
./packetDup status

# 포그라운드 실행
./packetDup run

# 옵션과 함께 사용
./packetDup start -config my.yaml -pid /var/run/packetdup.pid -log /var/log/packetdup.log

옵션:

옵션 설명 기본값
-config 설정 파일 경로 config.yaml
-engine 프록시 엔진 (go/ebpf) go
-base-path 리버스 프록시 base path (없음)
-pid PID 파일 경로 packetDup.pid
-log 로그 파일 경로 packetDup.log
-nginx nginx 설정 예시 출력 -

실행 후 웹 브라우저에서 http://localhost:8891 접속 (포트는 config.yaml에서 변경 가능)

웹 UI 사용법

  1. 노드 추가: 왼쪽 사이드바에서 노드를 캔버스로 드래그 앤 드롭

    • Listen (녹색): 수신 포트 설정
    • Target (파란색): 메인 대상 서버
    • Mirror (분홍색): 미러링 대상 서버
  2. 연결 생성: Listen 노드의 출력 포트(오른쪽 원)에서 드래그하여 Target/Mirror 노드의 입력 포트(왼쪽 원)에 연결

  3. 노드 편집: 더블클릭 또는 우클릭 > Edit

  4. 규칙 적용: "Apply Rules" 버튼 클릭

  5. 기타 조작:

    • 연결선 클릭: 연결 삭제
    • Delete 키: 선택된 노드 삭제
    • Clear All: 캔버스 초기화
    • Reload: 서버에서 규칙 다시 불러오기

설정 파일 (config.yaml)

bind_addr: 0.0.0.0  # 바인딩 주소 (0.0.0.0: 모든 인터페이스, 127.0.0.1: 로컬만)
web_port: 8891
base_path: ""       # nginx 리버스 프록시 사용 시 설정 (예: /packetdup)

rules:
  - id: rule-1
    name: HTTP Mirror
    enabled: true
    protocol: tcp
    listen_port: 8000
    target: 192.168.1.100:80
    mirrors:
      - 192.168.1.101:80
      - 192.168.1.102:80

REST API

Method Endpoint 설명
GET /api/rules 규칙 목록 조회
POST /api/rules 규칙 추가
PUT /api/rules/:id 규칙 수정
DELETE /api/rules/:id 규칙 삭제
POST /api/rules/:id/toggle 규칙 활성화/비활성화
GET /api/stats 통계 정보 조회

테스트 유틸리티

Sender

지정된 주소로 패킷을 지속적으로 전송하는 유틸리티

./sender [옵션]

옵션:
  -proto string      프로토콜: tcp 또는 udp (기본값: tcp)
  -addr string       대상 주소 host:port (기본값: 127.0.0.1:8000)
  -interval duration 전송 간격 (기본값: 1s)
  -msg string        사용자 정의 메시지 (기본값: 자동 생성)
  -count int         전송할 패킷 수, 0=무제한 (기본값: 0)
  -size int          패킷 크기 바이트 (기본값: 메시지 길이)

Receiver

지정된 포트에서 패킷을 수신하여 출력하는 유틸리티

./receiver [옵션]

옵션:
  -proto string    프로토콜: tcp 또는 udp (기본값: tcp)
  -port int        수신 포트 (기본값: 8080)
  -v               상세 출력 (전체 패킷 데이터 표시)
  -hex             16진수 덤프 표시

테스트 예시

TCP 미러링 테스트

┌─────────┐     ┌───────────┐     ┌─────────────┐
│ Sender  │────▶│ PacketDup │────▶│ Target:8080 │
│ :8000   │     │  :8000    │     └─────────────┘
└─────────┘     │           │     ┌─────────────┐
                │           │────▶│ Mirror:8081 │
                └───────────┘     └─────────────┘

1. Target 서버 실행 (터미널 1)

./receiver -port 8080

2. Mirror 서버 실행 (터미널 2)

./receiver -port 8081

3. PacketDup 실행 및 규칙 설정 (터미널 3)

./packetDup
# 웹 UI (http://localhost:8891)에서 규칙 설정:
# - Listen: TCP :8000
# - Target: 127.0.0.1:8080
# - Mirror: 127.0.0.1:8081
# - "Apply Rules" 클릭

4. 패킷 전송 (터미널 4)

./sender -addr 127.0.0.1:8000 -interval 1s

UDP 미러링 테스트

1. Target 서버

./receiver -proto udp -port 8080

2. Mirror 서버

./receiver -proto udp -port 8081

3. PacketDup 규칙 설정

  • Protocol: UDP
  • Listen Port: 8000
  • Target: 127.0.0.1:8080
  • Mirror: 127.0.0.1:8081

4. 패킷 전송

./sender -proto udp -addr 127.0.0.1:8000 -interval 500ms

빠른 전송 테스트

# 100ms 간격으로 100개 패킷 전송
./sender -addr 127.0.0.1:8000 -interval 100ms -count 100

# 커스텀 메시지 전송
./sender -addr 127.0.0.1:8000 -msg "Hello, World!"

# 1KB 크기 패킷 전송
./sender -addr 127.0.0.1:8000 -size 1024

Hex 덤프로 패킷 확인

./receiver -port 8080 -v -hex

프로젝트 구조

packetDup/
├── main.go                 # 엔트리 포인트 (start/stop/status/run)
├── daemon_unix.go          # Unix 플랫폼 데몬 지원
├── daemon_windows.go       # Windows 플랫폼 데몬 지원
├── go.mod                  # Go 모듈
├── config/
│   └── config.go           # 설정 관리 (YAML)
├── proxy/
│   ├── proxy.go            # 프록시 매니저
│   ├── tcp.go              # TCP 프록시
│   └── udp.go              # UDP 프록시
├── web/
│   ├── server.go           # 웹 서버
│   ├── handlers.go         # REST API 핸들러
│   └── static/
│       └── index.html      # 웹 UI
├── cmd/
│   ├── sender/
│   │   └── main.go         # Sender 유틸리티
│   └── receiver/
│       └── main.go         # Receiver 유틸리티
└── config.yaml             # 설정 파일

라이선스

MIT License

About

간단한 Packet Proxy

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages