아래는 PowerShell 스크립트를 활용하여 로컬 네트워크에서 RDP(Remote Desktop Protocol, 원격 데스크톱) 포트(기본 포트: 3389)가 열려 있는 호스트를 스캔하는 코드의 상세한 설명입니다. 이 스크립트는 네트워크 관리나 시스템 보안 관점에서 유용하게 사용할 수 있습니다.
🔍 PowerShell로 RDP 포트 스캔하기: 스크립트 완전 분석
📌 전체 스크립트
$subnet = "192.168.0"
$port = 3389
1..254 | ForEach-Object {
$ip = "$subnet.$_"
$tcp = New-Object System.Net.Sockets.TcpClient
try {
$iar = $tcp.BeginConnect($ip, $port, $null, $null)
$wait = $iar.AsyncWaitHandle.WaitOne(200) # 200ms 타임아웃
if ($wait -and $tcp.Connected) {
Write-Host "✅ RDP 가능: $ip"
}
} catch {
# 무시
} finally {
$tcp.Close()
}
}
🧠 스크립트의 핵심 동작 설명
1. $subnet = "192.168.0"
- 로컬 네트워크의 서브넷을 지정합니다.
- 일반적으로 가정이나 소규모 네트워크 환경에서는 192.168.0.0/24나 192.168.1.0/24 같은 서브넷을 사용합니다.
- 이 스크립트는 192.168.0.1부터 192.168.0.254까지의 IP를 대상으로 스캔합니다.
2. $port = 3389
- RDP(Remote Desktop Protocol)의 기본 포트 번호입니다.
- 원격 접속을 허용하는 윈도우 시스템에서는 이 포트가 열려 있어야 합니다.
3. 1..254 | ForEach-Object { ... }
- IP 주소의 마지막 옥텟(1~254)을 순회하면서 각 IP에 대해 접속을 시도합니다.
- 예를 들어 192.168.0.1, 192.168.0.2 … 192.168.0.254까지 총 254개의 주소를 순회합니다.
4. $tcp = New-Object System.Net.Sockets.TcpClient
- TCP 접속을 위한 객체를 생성합니다.
- 이 객체를 통해 포트에 직접 접속을 시도할 수 있습니다.
5. BeginConnect와 비동기 연결 시도
$iar = $tcp.BeginConnect($ip, $port, $null, $null)
$wait = $iar.AsyncWaitHandle.WaitOne(200)
- BeginConnect: 비동기 방식으로 특정 IP와 포트에 연결을 시도합니다.
- WaitOne(200): 200ms 동안 연결을 기다립니다.
- 200ms 안에 연결에 성공하면 $wait는 True가 됩니다.
- 네트워크 대역이 클 경우 이 값을 높이면 정확도가 올라가지만 스캔 시간이 길어집니다.
6. 연결 성공 여부 확인
if ($wait -and $tcp.Connected) {
Write-Host "✅ RDP 가능: $ip"
}
- 조건이 모두 만족되면 해당 IP는 RDP 연결이 가능한 상태임을 의미합니다.
- Write-Host를 통해 콘솔에 결과를 출력합니다.
7. 예외 처리와 자원 정리
catch {
# 무시
} finally {
$tcp.Close()
}
- 연결 중 예외가 발생하더라도 프로그램이 중단되지 않도록 catch에서 무시 처리합니다.
- finally 블록에서는 사용한 TCP 객체를 반드시 닫아 리소스를 정리합니다.
💡 활용 팁
✅ PowerShell 관리자 권한으로 실행
- PowerShell은 기본적으로 제한된 권한으로 실행되며, 일부 네트워크 탐색 명령은 관리자 권한이 필요할 수 있습니다.
- “관리자 권한으로 PowerShell 실행” 후 스크립트 복사 > 붙여넣기 하세요.
✅ PowerShell ISE 관리자 권한으로 실행
- 스크립트란에 스크립트 복사하여 붙여넣기후 실행(F5)
✅ 스캔 범위 변경
- 192.168.0 대신 192.168.1이나 10.0.0 등 다른 서브넷을 지정하여 다른 네트워크 스캔도 가능합니다.
✅ 포트 변경
- RDP 외에도 다른 서비스 포트를 테스트하고 싶다면 $port 값을 예: 80(HTTP), 22(SSH), 443(HTTPS) 등으로 변경하면 됩니다.
🔐 보안 관점에서의 중요성
- RDP 포트는 해커들의 주요 공격 포인트입니다.
- 이 스크립트를 사용하면 열려 있는 RDP 포트를 탐지하여 방화벽 설정이나 접근 제어 정책을 강화할 수 있습니다.
- 특히 외부망에 노출된 RDP 포트는 매우 위험하므로, 불필요하게 열려 있는 포트는 즉시 차단하는 것이 좋습니다.
🛠️ 결과 자동 저장 (응용)
콘솔 출력 외에 파일로 저장하고 싶다면 다음처럼 수정할 수 있습니다:
if ($wait -and $tcp.Connected) {
"$ip" | Out-File -Append -FilePath "open_rdp_hosts.txt"
}
🏁 마무리
이 PowerShell 스크립트는 간단하면서도 강력한 도구로, 네트워크 내에서 RDP가 활성화된 장비를 손쉽게 확인할 수 있는 방법입니다. 실무 네트워크 관리자는 물론, 개인 PC 보안을 강화하고 싶은 사용자에게도 매우 유용하게 활용될 수 있습니다.
'기타' 카테고리의 다른 글
윈도우11 자동 업데이트 영구 차단 방법 (0) | 2025.05.08 |
---|---|
dotnet dev-certs로 로컬 HTTPS 인증서 만들고 설치하기 (+삭제 방법) (0) | 2025.04.28 |
로컬 개발용 SSL 인증서 만들기: PowerShell로 localhost 인증서 생성하기 (0) | 2025.04.28 |
원격데스크탑 포트 변경 (1) | 2024.11.12 |
WOL, WoWLAN 적용 기록 (0) | 2024.09.09 |