Python을 사용한 종합적인 네트워크 모니터링 도구입니다.
기본적인 네트워크 진단 기능과 모니터링 기능을 제공하여 네트워크 상태를 파악하고 문제를 진단하는 데 도움을 줍니다.
- 기본 프로젝트 구조 설정
- Ping 테스트 기능:
- 특정 호스트의 응답 시간 측정
- 패킷 손실률 계산
- 최소/최대/평균 응답 시간 통계
- 포트 스캔 기능:
- 특정 호스트의 열린 포트 확인
- 서비스 이름 식별
- 커스텀 포트 범위 지정 가능
- 일반적인 포트만 스캔하는 옵션
- 멀티스레딩을 이용한 병렬 스캔
- DNS 조회 기능:
- 도메인 이름에 대한 다양한 DNS 레코드 조회 (A, AAAA, MX, NS, TXT, SOA, CNAME)
- IP 주소에 대한 역방향 DNS 조회
- 상세한 DNS 정보 표시 (TTL, 우선순위 등)
- 강력한 오류 처리 및 디버깅 정보
- 웹 인터페이스:
- 직관적인 사용자 인터페이스로 모든 기능에 접근 가능
- Ping 테스트, 포트 스캔, DNS 조회를 웹에서 실행
- 실시간 결과 표시 및 포맷팅
- 반응형 디자인으로 다양한 기기에서 사용 가능
- 사용자 친화적인 폼 검증 및 에러 처리
- 주기적 모니터링 및 알림 기능:
- 여러 호스트와 서비스의 상태를 주기적으로 모니터링
- 설정 가능한 확인 간격 및 알림 임계값
- 다양한 알림 방식 지원 (이메일, 로그 파일, 콘솔)
- 문제 발생 및 복구 시 자동 알림
- YAML 기반 설정 파일로 쉬운 구성 관리
- Docker 컨테이너화:
- 애플리케이션의 컨테이너화로 쉬운 배포 및 실행
- Docker Compose를 통한 웹 인터페이스와 모니터링 서비스 통합 실행
- 다양한 환경에서 일관된 실행 환경 제공
- 호스트 머신과의 네트워크 연동 지원
- 네트워크 서버 구현:
- TCP 에코 서버 (단일/멀티 클라이언트 지원)
- UDP 에코 서버
- 파일 전송 서버 (업로드 기능)
- CLI 통합 (
python app.py server
명령어) - Docker Compose 환경에서 서비스 실행
- 기존 클라이언트 도구와의 통합 테스트 완료
- 고급 소켓 제어:
- SO_REUSEADDR, SO_KEEPALIVE, TCP_NODELAY 등 소켓 옵션 활용
- 논블로킹 소켓 구현으로 성능 향상 (최대 3.2배)
- select() 기반 정밀 타임아웃 제어 메커니즘
- 적응형 타임아웃 (95퍼센타일 응답시간 기반 자동 조정)
- 포트 스캐너 성능 최적화 및 자동 벤치마크 시스템
- 4가지 스캔 방법 성능 비교 (기본/고급/멀티스레드/고급+멀티스레드)
- 자동 최적화: 호스트별 최적 타임아웃/워커수/소켓옵션 자동 선택
- 기본 소켓과 고급 소켓 옵션 선택적 사용 가능
- CLI 및 웹 인터페이스 모두 지원
- Python 3.6 이상
- pip (Python 패키지 관리자)
- Docker 및 Docker Compose (Docker를 이용한 실행 시)
-
저장소 클론 또는 다운로드:
git clone https://github.com/DevOpsLab-OZ/network_monitor.git cd network-monitor
-
가상환경 생성 및 활성화:
python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows
-
필요한 패키지 설치:
pip install -r requirements.txt
호스트에 대한 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 레코드를 조회하려면:
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
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
네트워크 서버를 실행하려면:
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 송수신 버퍼
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 기반 모니터링 설정 조회
포트 스캔 고급 옵션:
- 고급 소켓 옵션: 체크박스를 선택하면 논블로킹 소켓으로 스캔 (성능 향상)
- 적응형 타임아웃: 네트워크 상태에 따라 타임아웃 자동 조정
- 자동 최적화: 대상 호스트에 최적화된 설정으로 자동 스캔
- 성능 벤치마크: 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 build -t network-monitor .
-
Docker 컨테이너 실행 (웹 인터페이스):
docker run -p 5000:5000 network-monitor
-
Docker 컨테이너 실행 (모니터링 서비스):
docker run network-monitor python monitor.py
웹 인터페이스와 모니터링 서비스를 함께 실행하려면:
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에 계획된 향후 브랜치들입니다:
- I/O 멀티플렉싱:
- select() 기반 단일 스레드 멀티클라이언트 처리
- epoll() 고성능 서버 (Linux)
- 기존 멀티스레딩과 성능 비교 기능
- 브로드캐스팅/멀티캐스팅:
- UDP 브로드캐스트 네트워크 스캔
- 로컬 네트워크 자동 탐지
- 기존 네트워크 모니터링에 통합
- 패킷 레벨 분석:
- Raw 소켓 패킷 캡처
- IP/TCP/UDP 헤더 분석
- 네트워크 트래픽 통계
- 웹 인터페이스에 트래픽 분석 탭 추가
- 커스텀 프로토콜:
- 바이너리 프로토콜 설계
- 메시지 프레이밍
- 기존 서버들에 적용
- 결과 데이터베이스 저장 및 이력 조회 기능
- 더 풍부한 시각화 및 대시보드
- API 엔드포인트 제공
- 테스트 코드 작성 및 CI/CD 파이프라인 구축
이 프로젝트는 개발 진행 중입니다. 기여하고 싶으시다면:
- 이 저장소를 포크합니다.
- 새 기능 브랜치를 만듭니다:
git checkout -b feature/amazing-feature
- 변경사항을 커밋합니다:
git commit -m 'Add some amazing feature'
- 브랜치에 푸시합니다:
git push origin feature/amazing-feature
- Pull Request를 제출합니다.
MIT License