▣ 윈도우10&11에서 네트워크 프린터 드라이버의 SNMP 커뮤니티 이름을 강제/자동 변경하는 방법
개요
SNMP는 무엇인가?
https://fiberroad.com/ko/resources/glossary/what-is-snmp/
SNMP란 무엇이며 네트워크 성능을 모니터링하는 데 어떻게 도움이 됩니까?
SNMP란 무엇입니까? SNMP(Simple Network Management Protocol)는 네트워크 관리에 도움이 되는 귀중한 네트워크 프로토콜입니다.
fiberroad.com

이 설정은 USB케이블로 PC와 연결해서 사용하는 프린터는 해당 되지 않습니다.
프린터에 랜포트(RJ45)가 있어서 네트워크 연결/관리를 지원하는 프린터를 사용하는 경우에 해당됩니다.
해당 프린터에 ip를 할당해서 사용하는 경우에 네트워크 프린터라고 합니다.
네트워크 프린터를 사용하면 여러모로 편리합니다.
일괄적으로 관리자 자리에서 원격으로 상태를 확인할 수 있고 일부 설정을 원격으로 웹관리자 페이지로 접속해서 변경을 할 수 있습니다. 펌웨어 업그레이드까지도 원격지에서 가능합니다.
컴퓨터(윈도우)에서 프린터 드라이버가 프린터와 통신을 해서 프린터 상태를 모니터링 할 수 있게 되어있습니다.
그럴 때 사용하는 것이 SNMP 입니다. *snmp는 UDP 161(정보수집), 162(Trap메시지 전송) 번 포트를 사용해서 통신을 합니다.
따라서, 원활한 snmp 통신이 이루어 지기 위해서는 보안이 강화된 곳에서는 사용자 PC가 사용하는 ip대역과 프린터가 사용하는 ip대역간에 UDP 161,162번 포트 통신을 허용하도록 내부 방화벽에서 정책 설정을 해 주셔야 합니다.
방화벽 정책은 허용이 되었다고 가정했을 때...또 문제가 될 수 있는 게 있습니다.
이 SNMP가 버전이 1,2,3까지 있고 숫자가 커질수록 보안이 강화된 버전입니다.

저가형 흑백 레이저 프린터에서는 버전1을 기본으로 사용하게 되어있으며, 고가형의 고급 중/대형 레이저 프린터나 복합기는 v3까지 지원됩니다.
snmp 통신을 위해서는 커뮤니티 이름을 설정해서 프린터(내부 설정)와 윈도우에 설치된 프린터 드라이버에 같은 이름으로 설정이 되어있을 때 서로 통신이 정상적으로 이루어 지게 되어있습니다.
이 커뮤니티 이름이 기본값으로 public (공용)으로 지정되어져 있을 겁니다.
여러분들도 네트워크 프린터를 사용하고 있다면 프린터 드라이버 설정을 확인 해 보세요.
아래와 같이 제어판(설정)-장치 및 프린터 로 가셔서 설치된 "네트워크 프린터 드라이버의 속성-포트-표준 TCP/IP 포트-포트구성-포트설정-SNMP 상태 사용-커뮤니티 이름 "을 보시면 public로 되어 있을 겁니다.

취약점
http://forensic-artifact.com/osint-analysis/sho05
MAESTRO Forensics & INSEC Security
네트워크 프린터 해킹 사례 해당 공격은 프린터에서 인쇄물을 출력하기 위해 RAW 데이터를 전달 받는 TCP/9100 포트로 발생되며 프린터 기기 특성 상 보안 설정이 전혀 되어있지 않기 때문에 외부
forensic-artifact.com


SNMP 커뮤니티 이름이 public로 설정 되어 있으면 보안상 문제가 될 수 있습니다.
https://www.boannews.com/media/view.asp?idx=71641&direct=mobile
[동영상 강연] 프린터·복합기를 이용한 해킹사례
제8회 개인정보보호 페어에서 ‘네트워크 엔드포인트 보안강화 : 프린터·복합기를 이용한 해킹사례’라는 주제로 발표한 HP 김인구 이사의 강연 풀영상이다.
www.boannews.com
https://www.igloo.co.kr/security-information/network-printer-hacking/
Network Printer Hacking
서비스사업본부 보안분석팀 김미희 1. 개요 초연결과 초지능을 특징으로 하는 제4차 산업혁명은 기존 산업혁명에 비해 더 넓은 범위에 더 빠른 속도로 새로운 시대를 이끌고 있다. ‘4
www.igloo.co.kr
조치방법1
그래서 모든 컴퓨터에 설치된 프린터 드라이버에서 사용중인 네트워크 프린터 포트의 포트 구성에 설정된 커뮤니티 이름을 public이 아닌 다른 이름으로 변경해 주어야 합니다.
제가 테스트 한 환경은 아래와 같습니다.
약 500대 정도의 윈도우 사용자 PC 사용,
각 PC마다 3대의 네트워크 프린터 드라이버 설정됨,
각 과 마다 네트워크 프린터의 사용ip가 다름
Genian NAC 사용.
500여대의 PC를 자리마다 돌아다니면서 프린터 드라이버에서 포트설정을 열고 커뮤니티 이름을 수동으로 변경해 주려면....
아마도..퇴사자가 발생될 겁니다.
그래서 이 문제를 자동으로 스크립트로 조치할 수 있는 방법을 알아 보았습니다.
생성형 Ai인 구글Ai와 쳇GPT를 이용해서 만들었습니다.
프린터 드라이버에서 사용중인 네트워크 포트를 찾고 기본 커뮤니티 이름인 public가 있으면 mySNMP로 변경하도록
요청했고, 생성된 스크립트를 테스트 해 보면서 오류나는 부분을 수정 보완했고, 테스트 해 보니 잘 적용된 것을 올려 봅니다.
만들어진 CMD파일과 ps1 파일은 같은 폴더에 위치되어야 합니다.
아래와 같이 C:\전산실\ch_snmp\ 폴더에 두 파일을 위치시킨 후
cmd파일을 실행 해 주면 ps1 파일을 파워쉘에서 실행시켜 줍니다.

ps1 파일 내용
# 변경할 SNMP 커뮤니티
$OldCommunity = "public"
$NewCommunity = "mySNMP"
Write-Host "SNMP 커뮤니티 변경 작업 시작..."
# 프린터 TCP/IP 포트 가져오기
$printerPorts = Get-WmiObject -Class Win32_TCPIPPrinterPort
foreach ($port in $printerPorts) {
# 현재 SNMP 커뮤니티가 일치하는 경우만 변경
if ($port.SNMPCommunity -eq $OldCommunity) {
Write-Host "변경 중: $($port.Name)"
$port.SNMPEnabled = $true
$port.SNMPCommunity = $NewCommunity
$port.Put() | Out-Null
}
}
Write-Host "SNMP 커뮤니티 변경 완료."

cmd 파일 내용
@echo off
setlocal
:: 현재 스크립트 전체 경로
set THIS_SCRIPT=%~s0
:: 관리자 권한 확인
net session >nul 2>&1
if %errorlevel% NEQ 0 (
echo 관리자 권한으로 실행됩니다...
powershell -Command "Start-Process cmd -ArgumentList '/c \"\"%THIS_SCRIPT%\"\"' -Verb runAs"
exit
)
:: 관리자 권한으로 실행된 상태
echo 관리자 권한 확인됨.
:: 실행할 PowerShell 스크립트 지정 (경로 공백/한글 안전)
set PS_SCRIPT=C:\전산실\ch_snmp\ch_snmp2.ps1
echo PowerShell 스크립트 실행 중...
powershell -NoProfile -ExecutionPolicy Bypass -File "%PS_SCRIPT%"
echo.
echo 작업 완료. Enter 키를 누르면 종료됩니다.
pause > nul
endlocal
cmd 파일은 관리자권한을 체크해서 강제로 관리자 권한을 얻어서 파워쉘이 구동될 수 있도록 했습니다.
run_snmp_ch2.CMD 파일을 실행 시켜 봤습니다.
커뮤니티 이름변경이 완료 되었다고 나옵니다.

커뮤니티 이름을 확인 해 보니....mySNMP로 잘 변경이 되었습니다.

이제 여러대의 네트워크 프린터 드라이버가 설치되어있는 사용자 PC에서 테스트를 해 봐야 겠습니다.
테스트에 성공하면 NAC을 이용해서 배포/실행 해 주시면 돌아다니지 않고도 변경이 가능합니다.
물론, 사용자 드라이버에서 커뮤니티 이름을 변경하기 전에 , 각 프린터/복합기 웹관리자 페이지에서도 SNMP 커뮤니티 이름을 같은 걸로 먼저 변경을 먼저 해 주셔야 합니다. 프린터 관리자에서 먼저 변경을 완료 한 후 그 다음에 각 사용자PC의 프린터 드라이버에서 변경을 해 주시면 됩니다.
조치방법2
좀 더 강화해서 모든 네트워크 프린터의 커뮤니티 이름을 강제로 변경하는 스크립트를 요청 해 보았습니다.
ps1 파일 내용
# 변경할 SNMP 커뮤니티 이름
$NewCommunity = "testSNMP"
Write-Host "모든 SNMP 커뮤니티 이름을 '$NewCommunity' 로 일괄 변경합니다..."
Write-Host ""
# 전체 TCP/IP 프린터 포트 가져오기
$printerPorts = Get-WmiObject -Class Win32_TCPIPPrinterPort
foreach ($port in $printerPorts) {
Write-Host "변경 중: $($port.Name)"
# SNMP 활성화
$port.SNMPEnabled = $true
# SNMP 커뮤니티 이름 강제 변경
$port.SNMPCommunity = $NewCommunity
# 적용 (WMI 업데이트)
$port.Put() | Out-Null
}
Write-Host ""
Write-Host "모든 프린터 포트의 SNMP 커뮤니티 이름 변경 완료!"
cmd파일 내용
@echo off
setlocal
:: PowerShell 스크립트 경로 지정
set PS_SCRIPT=C:\전산실\ch_snmp\ch_snmp_all.ps1
:: 관리자 권한 확인
net session >nul 2>&1
if %errorlevel% NEQ 0 (
echo 관리자 권한으로 다시 실행합니다...
powershell -Command "Start-Process cmd -ArgumentList '/c \"\"%~s0\"\"' -Verb runAs"
exit
)
echo 관리자 권한 확인됨.
echo PowerShell 스크립트 실행 중...
powershell -NoProfile -ExecutionPolicy Bypass -File "%PS_SCRIPT%"
echo.
echo 작업이 완료되었습니다. 엔터를 누르세요.
pause > nul
endlocal
마찬가지로 ps1, cmd 두 파일을 같은 폴더에 위치 시킨 후 cmd 파일을 실행 해 주시면
snmp가 꺼져 있어도 강제로 사용함으로 체크 해 주면서 커뮤니티 이름까지 변경해 줍니다.
잘 되네요.
SNMP상태 사용을 끈 후

CMD 실행

실행 후- SNMP 상태 사용도 활성화(체크) 되고 커뮤니티 이름도 testSNMP로 잘 변경 되었습니다.

이게 이렇게 간편하게 되네요 -_- ㅎㅎ
여기서 반드시 주의 할 것은 ps1 파일과 cmd 파일을 메모장에서 생성해서 저장할 때
인코딩 형식은 ANSI로 해 주셔야 오류가 없습니다. 한글도 잘 출력 되구요!!
'IT Helpdesk' 카테고리의 다른 글
| 윈도우11 BSOD 오류 발생#1-분석결과 with ChatGPT-조치결과 추가 (0) | 2026.02.02 |
|---|---|
| 관리자 권한 CMD 실행 확인 스크립트=By ChatGPT (0) | 2025.12.05 |
| 유튜브 영상 재생 시 화면 깜빡임-문제 해결(두 가지 중복 고장) (0) | 2025.11.10 |
| TG 삼보컴퓨터 데스크탑 DG375-GA51-0BQN BIOS 업그레이드 하기-1.06(N) (0) | 2025.11.09 |
| 윈도우11-캡처 도구 11.2508.29.0 버전을 오프라인 환경에서 설치하기 - 앱 설치 프로그램이 패키지 종속성을 설치하지 못했습니다 -문제 해결 (3) | 2025.11.08 |
