Skip to content

feat: 고급 소켓 옵션 및 성능 최적화 시스템 구현 #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jul 27, 2025
Merged
218 changes: 196 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,18 @@ Python을 사용한 종합적인 네트워크 모니터링 도구입니다.
- Docker Compose 환경에서 서비스 실행
- 기존 클라이언트 도구와의 통합 테스트 완료

### feature/socket-options
- **고급 소켓 제어**:
- SO_REUSEADDR, SO_KEEPALIVE, TCP_NODELAY 등 소켓 옵션 활용
- 논블로킹 소켓 구현으로 성능 향상 (최대 3.2배)
- select() 기반 정밀 타임아웃 제어 메커니즘
- 적응형 타임아웃 (95퍼센타일 응답시간 기반 자동 조정)
- 포트 스캐너 성능 최적화 및 자동 벤치마크 시스템
- 4가지 스캔 방법 성능 비교 (기본/고급/멀티스레드/고급+멀티스레드)
- 자동 최적화: 호스트별 최적 타임아웃/워커수/소켓옵션 자동 선택
- 기본 소켓과 고급 소켓 옵션 선택적 사용 가능
- CLI 및 웹 인터페이스 모두 지원

## 설치 방법

### 요구사항
Expand Down Expand Up @@ -122,8 +134,12 @@ python app.py scan google.com
- `-p, --ports`: 스캔할 포트 범위 (예: 1-1024)
- `--common`: 일반적인 포트만 스캔
- `-t, --timeout`: 각 포트에 대한 타임아웃 시간(초) (기본값: 0.5)
- `--advanced`: 고급 소켓 옵션 사용 (논블로킹 소켓으로 성능 향상)
- `--adaptive-timeout`: 적응형 타임아웃 사용 (네트워크 상태 기반 자동 조정)
- `--optimize`: 대상 호스트에 최적화된 파라미터로 자동 스캔
- `--benchmark`: 성능 벤치마크 실행

예시:
#### 기본 스캔 예시:
```bash
# 포트 20-100 범위 스캔
python app.py scan localhost -p 20-100
Expand All @@ -135,6 +151,29 @@ python app.py scan localhost --common
python app.py scan localhost -t 0.2
```

#### 고급 스캔 예시:
```bash
# 논블로킹 소켓으로 고성능 스캔
python app.py scan google.com --common --advanced

# 적응형 타임아웃으로 네트워크 최적화 스캔
python app.py scan google.com --common --adaptive-timeout

# 모든 고급 옵션을 함께 사용
python app.py scan google.com --common --advanced --adaptive-timeout

# 자동 최적화로 최상의 성능 스캔
python app.py scan google.com --optimize

# 성능 벤치마크 실행 (4가지 방법 비교)
python app.py scan localhost --benchmark
```

#### 성능 비교 (실제 테스트 결과):
- **기본 소켓**: 0.006초 (기준)
- **논블로킹 소켓**: 0.002초 (3.2배 빠름)
- **멀티스레드 + 논블로킹**: 0.006초 (안정적 성능)

#### DNS 조회

##### 정방향 DNS 조회
Expand Down Expand Up @@ -193,13 +232,26 @@ python app.py server tcp-echo
- `--host`: 바인딩할 호스트 (기본값: localhost)
- `--port`: 바인딩할 포트 (기본값: 8080)
- `--multi`: 멀티 클라이언트 지원 활성화
- `--advanced`: 고급 소켓 옵션 사용 (SO_KEEPALIVE, TCP_NODELAY 등)

예시:
```bash
# 멀티 클라이언트 지원으로 포트 9000에서 실행
# 기본 TCP 에코 서버
python app.py server tcp-echo --host 0.0.0.0 --port 9000

# 멀티 클라이언트 지원
python app.py server tcp-echo --host 0.0.0.0 --port 9000 --multi

# 고급 소켓 옵션으로 최적화된 서버
python app.py server tcp-echo --host 0.0.0.0 --port 9000 --multi --advanced
```

고급 소켓 옵션 사용 시:
- **SO_REUSEADDR**: 서버 재시작 시 빠른 포트 바인딩
- **SO_KEEPALIVE**: TCP 연결 유지 확인 (2시간 간격)
- **TCP_NODELAY**: 단일 클라이언트 모드에서 지연 최소화
- **최적화된 버퍼 크기**: 64KB 송수신 버퍼

##### UDP 에코 서버

```bash
Expand Down Expand Up @@ -249,7 +301,32 @@ http://localhost:5000
웹 인터페이스는 다음 기능을 제공합니다:
- **Ping 테스트**: 호스트의 응답 시간 측정
- **포트 스캔**: 특정 호스트의 열린 포트 확인
- 기본/고급 소켓 옵션 선택 (논블로킹 모드)
- 적응형 타임아웃 자동 조정
- 자동 최적화 기능 (원클릭 최적 설정)
- 성능 벤치마크 실행 (4가지 방법 비교)
- 실시간 성능 통계 및 방법별 분석
- **DNS 조회**: 도메인 이름에 대한 DNS 레코드 조회 및 역방향 DNS 조회
- **서버 상태 모니터링**: Docker 서비스 및 시스템 상태 확인
- **모니터링 설정 관리**: YAML 기반 모니터링 설정 조회

#### 웹 인터페이스 고급 기능 사용법

**포트 스캔 고급 옵션**:
1. **고급 소켓 옵션**: 체크박스를 선택하면 논블로킹 소켓으로 스캔 (성능 향상)
2. **적응형 타임아웃**: 네트워크 상태에 따라 타임아웃 자동 조정
3. **자동 최적화**: 대상 호스트에 최적화된 설정으로 자동 스캔
4. **성능 벤치마크**: 4가지 스캔 방법의 성능을 비교 분석

**서버 상태 모니터링**:
- Docker 컨테이너 서비스 상태 실시간 확인
- 각 서비스의 응답 시간 및 접근성 표시
- 시스템 전반적인 상태 요약

**모니터링 설정 관리**:
- 현재 설정된 모니터링 대상 및 설정 확인
- 알림 설정 (이메일, 로그, 콘솔) 상태 표시
- 설정 파일 존재 여부 및 수정 가이드 제공

### 주기적 모니터링

Expand Down Expand Up @@ -343,12 +420,28 @@ docker compose down

### 컨테이너 내부에서 명령행 도구 사용

#### 기본 사용법:
```bash
docker run network-monitor python app.py ping google.com
docker run network-monitor python app.py scan localhost --common
docker run network-monitor python app.py dns lookup google.com -t A
```

#### 고급 소켓 옵션 사용:
```bash
# 고성능 포트 스캔
docker run network-monitor python app.py scan google.com --common --advanced

# 자동 최적화 스캔
docker run network-monitor python app.py scan google.com --optimize

# 성능 벤치마크
docker run network-monitor python app.py scan localhost --benchmark

# 고급 옵션 TCP 서버 (별도 컨테이너에서)
docker run -p 8080:8080 network-monitor python app.py server tcp-echo --host 0.0.0.0 --advanced
```

### 주의사항

- 컨테이너 내부에서 localhost를 스캔하면 호스트 머신이 아닌 컨테이너 자체를 스캔합니다.
Expand All @@ -361,31 +454,112 @@ docker run network-monitor python app.py dns lookup google.com -t A

```
network_monitor/
├── network_monitor/ # 메인 패키지
│ ├── __init__.py # 패키지 초기화 파일
│ ├── ping_monitor.py # Ping 모니터링 모듈
│ ├── port_scanner.py # 포트 스캔 모듈
│ ├── dns_lookup.py # DNS 조회 모듈
│ ├── utils.py # 유틸리티 함수들
│ └── config.py # 설정 관리
├── app.py # 명령행 인터페이스
├── web_app.py # 웹 인터페이스
├── monitor.py # 주기적 모니터링 및 알림
├── templates/ # 웹 템플릿 디렉토리
│ └── index.html # 메인 웹 페이지
├── Dockerfile # Docker 이미지 빌드 설정
├── docker-compose.yml # Docker Compose 구성 파일
├── .dockerignore # Docker 빌드 제외 파일 목록
├── monitor_config.yaml # 모니터링 설정 파일
├── monitor.log # 모니터링 로그 파일
├── requirements.txt # 필요한 패키지 목록
└── README.md # 프로젝트 설명
├── network_monitor/ # 메인 패키지
│ ├── __init__.py # 패키지 초기화 파일
│ ├── ping_monitor.py # Ping 모니터링 모듈
│ ├── port_scanner.py # 포트 스캔 모듈 (고급 소켓 옵션 지원)
│ ├── dns_lookup.py # DNS 조회 모듈
│ ├── socket_options.py # 고급 소켓 옵션 관리
│ ├── timeout_manager.py # 정밀 타임아웃 제어
│ ├── performance_optimizer.py # 성능 최적화 및 벤치마크
│ ├── tcp_server.py # TCP 서버 (고급 소켓 옵션 지원)
│ ├── udp_server.py # UDP 서버
│ ├── file_server.py # 파일 전송 서버
│ ├── utils.py # 유틸리티 함수들
│ └── config.py # 설정 관리
├── app.py # 명령행 인터페이스 (고급 옵션 지원)
├── web_app.py # 웹 인터페이스 (고급 소켓 옵션 지원)
├── monitor.py # 주기적 모니터링 및 알림
├── templates/ # 웹 템플릿 디렉토리
│ └── index.html # 메인 웹 페이지 (고급 기능 UI 포함)
├── Dockerfile # Docker 이미지 빌드 설정
├── docker-compose.yml # Docker Compose 구성 파일
├── .dockerignore # Docker 빌드 제외 파일 목록
├── monitor_config.yaml # 모니터링 설정 파일
├── monitor.log # 모니터링 로그 파일
├── requirements.txt # 필요한 패키지 목록
└── README.md # 프로젝트 설명
```

## 성능 최적화 기능

### 자동 벤치마크
시스템이 자동으로 4가지 스캔 방법을 비교하여 최적의 성능을 찾습니다:

```bash
python app.py scan localhost --benchmark
```

**벤치마크 결과 예시:**
```
포트 스캔 성능 벤치마크 결과
============================================================
가장 빠른 방법: advanced_nonblocking

방법별 성능 결과:
- basic_blocking: 0.006초 (기준)
- advanced_nonblocking: 0.002초 (3.2배 빠름)
- threaded_basic: 0.008초
- threaded_advanced: 0.006초

효율성 점수 및 추천사항 자동 제공
```

### 적응형 타임아웃
네트워크 상태를 학습하여 호스트별 최적 타임아웃을 자동 계산:

```bash
python app.py scan google.com --adaptive-timeout
```

- 95퍼센타일 응답 시간 기반 계산
- 성공률에 따른 자동 조정
- 호스트별 개별 학습 및 적용

### 자동 최적화
대상 호스트에 맞는 최적 파라미터를 자동으로 찾아 적용:

```bash
python app.py scan google.com --optimize
```

자동으로 결정되는 항목:
- 최적 타임아웃 값
- 최적 워커 스레드 수
- 블로킹/논블로킹 소켓 선택
- 적응형 타임아웃 활성화

## 향후 개발 계획

다음은 project.txt에 계획된 향후 브랜치들입니다:

### feature/multiplexing (다음 우선순위)
- **I/O 멀티플렉싱**:
- select() 기반 단일 스레드 멀티클라이언트 처리
- epoll() 고성능 서버 (Linux)
- 기존 멀티스레딩과 성능 비교 기능

### feature/broadcast
- **브로드캐스팅/멀티캐스팅**:
- UDP 브로드캐스트 네트워크 스캔
- 로컬 네트워크 자동 탐지
- 기존 네트워크 모니터링에 통합

### feature/raw-socket
- **패킷 레벨 분석**:
- Raw 소켓 패킷 캡처
- IP/TCP/UDP 헤더 분석
- 네트워크 트래픽 통계
- 웹 인터페이스에 트래픽 분석 탭 추가

### feature/protocol
- **커스텀 프로토콜**:
- 바이너리 프로토콜 설계
- 메시지 프레이밍
- 기존 서버들에 적용

### 추가 계획
- 결과 데이터베이스 저장 및 이력 조회 기능
- 네트워크 트래픽 분석 기능
- 더 풍부한 시각화 및 대시보드
- API 엔드포인트 제공
- 테스트 코드 작성 및 CI/CD 파이프라인 구축
Expand Down
Loading