Skip to content

DevOpsLab-OZ/network_monitor

Repository files navigation

네트워크 모니터링 도구

Python을 사용한 종합적인 네트워크 모니터링 도구입니다.

기본적인 네트워크 진단 기능과 모니터링 기능을 제공하여 네트워크 상태를 파악하고 문제를 진단하는 데 도움을 줍니다.

현재 구현된 기능

feature/ping

  • 기본 프로젝트 구조 설정
  • Ping 테스트 기능:
    • 특정 호스트의 응답 시간 측정
    • 패킷 손실률 계산
    • 최소/최대/평균 응답 시간 통계

feature/scan

  • 포트 스캔 기능:
    • 특정 호스트의 열린 포트 확인
    • 서비스 이름 식별
    • 커스텀 포트 범위 지정 가능
    • 일반적인 포트만 스캔하는 옵션
    • 멀티스레딩을 이용한 병렬 스캔

feature/dns

  • DNS 조회 기능:
    • 도메인 이름에 대한 다양한 DNS 레코드 조회 (A, AAAA, MX, NS, TXT, SOA, CNAME)
    • IP 주소에 대한 역방향 DNS 조회
    • 상세한 DNS 정보 표시 (TTL, 우선순위 등)
    • 강력한 오류 처리 및 디버깅 정보

feature/web-interface

  • 웹 인터페이스:
    • 직관적인 사용자 인터페이스로 모든 기능에 접근 가능
    • Ping 테스트, 포트 스캔, DNS 조회를 웹에서 실행
    • 실시간 결과 표시 및 포맷팅
    • 반응형 디자인으로 다양한 기기에서 사용 가능
    • 사용자 친화적인 폼 검증 및 에러 처리

feature/monitor

  • 주기적 모니터링 및 알림 기능:
    • 여러 호스트와 서비스의 상태를 주기적으로 모니터링
    • 설정 가능한 확인 간격 및 알림 임계값
    • 다양한 알림 방식 지원 (이메일, 로그 파일, 콘솔)
    • 문제 발생 및 복구 시 자동 알림
    • YAML 기반 설정 파일로 쉬운 구성 관리

feature/docker

  • Docker 컨테이너화:
    • 애플리케이션의 컨테이너화로 쉬운 배포 및 실행
    • Docker Compose를 통한 웹 인터페이스와 모니터링 서비스 통합 실행
    • 다양한 환경에서 일관된 실행 환경 제공
    • 호스트 머신과의 네트워크 연동 지원

feature/servers

  • 네트워크 서버 구현:
    • TCP 에코 서버 (단일/멀티 클라이언트 지원)
    • UDP 에코 서버
    • 파일 전송 서버 (업로드 기능)
    • CLI 통합 (python app.py server 명령어)
    • Docker Compose 환경에서 서비스 실행
    • 기존 클라이언트 도구와의 통합 테스트 완료

feature/socket-options

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

설치 방법

요구사항

  • Python 3.6 이상
  • pip (Python 패키지 관리자)
  • Docker 및 Docker Compose (Docker를 이용한 실행 시)

설치 단계

  1. 저장소 클론 또는 다운로드:

    git clone https://github.com/DevOpsLab-OZ/network_monitor.git
    cd network-monitor
  2. 가상환경 생성 및 활성화:

    python -m venv venv
    source venv/bin/activate  # Linux/Mac
    # venv\Scripts\activate   # Windows
  3. 필요한 패키지 설치:

    pip install -r requirements.txt

사용 방법

명령행 인터페이스

Ping 테스트

호스트에 대한 Ping 테스트를 실행하려면:

python app.py ping google.com

옵션:

  • -c, --count: 보낼 ping 패킷 수 (기본값: 5)
  • -t, --timeout: 타임아웃 시간(초) (기본값: 2)

예시:

# 10개 패킷, 1초 타임아웃으로 ping 테스트
python app.py ping google.com -c 10 -t 1

포트 스캔

호스트의 포트를 스캔하려면:

python app.py scan google.com

옵션:

  • -p, --ports: 스캔할 포트 범위 (예: 1-1024)
  • --common: 일반적인 포트만 스캔
  • -t, --timeout: 각 포트에 대한 타임아웃 시간(초) (기본값: 0.5)
  • --advanced: 고급 소켓 옵션 사용 (논블로킹 소켓으로 성능 향상)
  • --adaptive-timeout: 적응형 타임아웃 사용 (네트워크 상태 기반 자동 조정)
  • --optimize: 대상 호스트에 최적화된 파라미터로 자동 스캔
  • --benchmark: 성능 벤치마크 실행

기본 스캔 예시:

# 포트 20-100 범위 스캔
python app.py scan localhost -p 20-100

# 일반적인 포트만 스캔
python app.py scan localhost --common

# 더 빠른 스캔을 위해 타임아웃 줄이기
python app.py scan localhost -t 0.2

고급 스캔 예시:

# 논블로킹 소켓으로 고성능 스캔
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 조회

도메인 이름에 대한 DNS 레코드를 조회하려면:

python app.py dns lookup google.com

옵션:

  • -t, --type: 조회할 레코드 타입 (기본값: A)
    • 지원 타입: A, AAAA, MX, NS, TXT, SOA, CNAME
  • --timeout: 타임아웃 시간(초) (기본값: 2.0)

예시:

# 메일 서버 조회
python app.py dns lookup gmail.com -t MX

# 네임서버 조회
python app.py dns lookup google.com -t NS

# 상세 SOA 정보 조회
python app.py dns lookup google.com -t SOA
역방향 DNS 조회

IP 주소에 대한 호스트 이름을 조회하려면:

python app.py dns reverse 8.8.8.8

옵션:

  • --timeout: 타임아웃 시간(초) (기본값: 2.0)

예시:

# 타임아웃 설정
python app.py dns reverse 1.1.1.1 --timeout 3.0

서버 실행

네트워크 서버를 실행하려면:

TCP 에코 서버
python app.py server tcp-echo

옵션:

  • --host: 바인딩할 호스트 (기본값: localhost)
  • --port: 바인딩할 포트 (기본값: 8080)
  • --multi: 멀티 클라이언트 지원 활성화
  • --advanced: 고급 소켓 옵션 사용 (SO_KEEPALIVE, TCP_NODELAY 등)

예시:

# 기본 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 에코 서버
python app.py server udp-echo

옵션:

  • --host: 바인딩할 호스트 (기본값: localhost)
  • --port: 바인딩할 포트 (기본값: 8081)

예시:

# 모든 인터페이스에서 포트 9001로 실행
python app.py server udp-echo --host 0.0.0.0 --port 9001
파일 전송 서버
python app.py server file-transfer

옵션:

  • --host: 바인딩할 호스트 (기본값: localhost)
  • --port: 바인딩할 포트 (기본값: 8082)
  • --upload-dir: 업로드 파일 저장 디렉토리 (기본값: uploads)

예시:

# 포트 9002에서 실행, 파일을 /tmp/uploads에 저장
python app.py server file-transfer --host 0.0.0.0 --port 9002 --upload-dir /tmp/uploads

웹 인터페이스

웹 인터페이스를 시작하려면:

python web_app.py

웹 브라우저에서 다음 URL로 접속합니다:

http://localhost:5000

웹 인터페이스는 다음 기능을 제공합니다:

  • Ping 테스트: 호스트의 응답 시간 측정
  • 포트 스캔: 특정 호스트의 열린 포트 확인
    • 기본/고급 소켓 옵션 선택 (논블로킹 모드)
    • 적응형 타임아웃 자동 조정
    • 자동 최적화 기능 (원클릭 최적 설정)
    • 성능 벤치마크 실행 (4가지 방법 비교)
    • 실시간 성능 통계 및 방법별 분석
  • DNS 조회: 도메인 이름에 대한 DNS 레코드 조회 및 역방향 DNS 조회
  • 서버 상태 모니터링: Docker 서비스 및 시스템 상태 확인
  • 모니터링 설정 관리: YAML 기반 모니터링 설정 조회

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

포트 스캔 고급 옵션:

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

서버 상태 모니터링:

  • Docker 컨테이너 서비스 상태 실시간 확인
  • 각 서비스의 응답 시간 및 접근성 표시
  • 시스템 전반적인 상태 요약

모니터링 설정 관리:

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

주기적 모니터링

모니터링 도구를 시작하려면:

python monitor.py

최초 실행 시 기본 설정 파일(monitor_config.yaml)이 생성됩니다. 이 파일을 편집하여 모니터링할 호스트, 확인 간격, 알림 방법 등을 설정할 수 있습니다.

설정 파일 예시

monitors:
  - name: "Google DNS 테스트"
    type: "ping"
    host: "8.8.8.8"
    count: 3
    timeout: 1
    check_interval: 300  # 5분마다 확인
    alert_threshold: 2   # 2번 연속 실패 시 알림

  - name: "웹 서버 테스트"
    type: "port"
    host: "example.com"
    port: 80
    timeout: 1
    check_interval: 60   # 1분마다 확인
    alert_threshold: 3   # 3번 연속 실패 시 알림

alerts:
  email:
    enabled: true
    smtp_server: "smtp.gmail.com"
    smtp_port: 587
    sender_email: "[email protected]"
    sender_password: "your-password"
    recipient_email: "[email protected]"
  log:
    enabled: true
    file: "monitor.log"
  console:
    enabled: true

Docker를 이용한 실행 방법

Docker 이미지 빌드 및 실행

  1. Docker 이미지 빌드:

    docker build -t network-monitor .
  2. Docker 컨테이너 실행 (웹 인터페이스):

    docker run -p 5000:5000 network-monitor
  3. Docker 컨테이너 실행 (모니터링 서비스):

    docker run network-monitor python monitor.py

Docker Compose를 이용한 실행

웹 인터페이스와 모니터링 서비스를 함께 실행하려면:

docker compose up

백그라운드에서 실행하려면:

docker compose up -d

실행 중인 서비스 확인:

docker compose ps

서비스 중지:

docker compose down

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

기본 사용법:

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

고급 소켓 옵션 사용:

# 고성능 포트 스캔
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를 스캔하면 호스트 머신이 아닌 컨테이너 자체를 스캔합니다.
  • 호스트 머신을 스캔하려면 Docker의 호스트 네트워크 모드를 사용하세요:
    docker run --network host network-monitor python app.py scan localhost

프로젝트 구조

network_monitor/
├── 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가지 스캔 방법을 비교하여 최적의 성능을 찾습니다:

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초

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

적응형 타임아웃

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

python app.py scan google.com --adaptive-timeout
  • 95퍼센타일 응답 시간 기반 계산
  • 성공률에 따른 자동 조정
  • 호스트별 개별 학습 및 적용

자동 최적화

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

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 파이프라인 구축

기여 방법

이 프로젝트는 개발 진행 중입니다. 기여하고 싶으시다면:

  1. 이 저장소를 포크합니다.
  2. 새 기능 브랜치를 만듭니다: git checkout -b feature/amazing-feature
  3. 변경사항을 커밋합니다: git commit -m 'Add some amazing feature'
  4. 브랜치에 푸시합니다: git push origin feature/amazing-feature
  5. Pull Request를 제출합니다.

라이센스

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published