DM Log

[RDP 모니터링 프로젝트 #0] RDP 화면 녹화 프로젝트 개요 본문

PJT/영상 파일 재생 PJT

[RDP 모니터링 프로젝트 #0] RDP 화면 녹화 프로젝트 개요

Dev. Dong 2025. 11. 29. 18:22

프로젝트 배경

여러 사용자가 Window Server에 대해 원격 접속하여 작업을 수행한 내용을 언제, 어떤 작업을 진행했는지 모니터링을 위한 프로젝트이다. 원격 접속한 사용자의 화면을 자동으로 녹화하고, 영상을 중앙 서버에서 날짜별로 재생할 수 있는 서비스를 구축하는 것이 목표이다.

고려 사항

  • 동시 여러 사용자가 RDP 접속에 대해 각 화면을 어떻게 녹화할까?
  •  Window서버에서 중앙 서버로 단방향 통신만 가능하다는 제약 조건
  • 녹화 파일을 효율적으로 저장 관리하는 방식
  • 녹화 파일이 중앙 서버로 이동 전에도 실시간으로 영상 확인 가능
  • Docker 기반 React와 Flask  웹 서버에서 영상 재생 UI 구성 

 

전체 시스템 아키텍처

Window Server

  • RDP 접속 감지(4624/4634)
  • ffmpeg 화면 녹화
  • 세션별 PID 관리
  • 스케쥴러로 파일 전송

중앙 서버

  • Docker 기반 flask + SQLite DB + React
  • 영상 재생 UI
  • 파일 메타데이터 저장

동작 흐름 요약

1. 사용자가 Window Server에 RDP 접속

  • Window Event ID 4624 감지 → record_start.bat 실행
  • ffmpeg 실행 → 사용자 화면 녹화 시작
  • 날짜/계정명/세션 ID 기반 폴더 구조 생성
  • PID 파일로 ffmpeg 프로세스 관리 (다중 접속 대응)

2. 사용자 로그오프

  • Window Event ID 4634 감지 → record_stop.bat 실행
  • PID 기반 ffmpeg 종료
  • 녹화 파일 저장
  • SQLite(DB)에 파일 정보 등록 (중앙 서버 API 호출)

3. 매일 새벽 00:01 → 자동 녹화 파일 Udap-SM 서버로 전송

  • Windows Scheduler  + SFTP
  • 파일 전송 성공 시 DB의 관련 키 변경 & 전송 완료 영상 삭제
  • 파일 전송 실패시 다음날 재시도 기능 고려

4. 중앙 서버 웹에서 사용자 영상 재생

  • 서버 선택
  • 날짜 선택
  • 파일 리스트 출력 (전송 완료 파일)
  • 영상 플레이어로 재생
  • 오늘 날짜 파일(전송 전 파일) 실시간 요청 시 재생 기능

주요 고려 사항

  1. SYSTEM 4624 이벤트가 여러번 찍혀 ffmpeg가 여러 번 실행되는 문제
    • 로그온 타입 필터 + Event XML 조건 추가
  2. 다중 RDP 녹화 시 기존 ffmpeg 프로세스가 서로 섞이는 문제
    • 세션ID별 PID 파일 관리로 해결
  3. 운영 서버에서 Window 서버로의 접근 불가
    • SFTP 단방향 구조 설계
  4. 오늘 날짜 파일 전송 전, 사용자 요청 시
    • Flask에서 요청 시 sftp로 임시 저장 구조로 해결