Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PortQry로 TCP/UDP 열린 포트 확인하는 방법 – 윈도우 포트 스캐너 완벽 가이드

윈도우에는 ping, telnet, pathping 등 TCP/IP 네트워크 문제를 진단할 수 있는 다양한 도구가 내장되어 있습니다. 하지만 이런 기본 도구만으로는 원격 서버의 네트워크 포트 상태를 편리하게 확인하거나 스캔하기 어렵습니다. Portqry.exe는 원격 호스트의 TCP/UDP 포트 응답 여부를 확인하여 다양한 네트워크 서비스와 방화벽 관련 문제를 진단할 수 있는 유용한 유틸리티입니다.

대부분의 경우 PortQry는 telnet 명령어의 더 강력한 대체재로 사용됩니다. telnet과 달리 UDP 포트의 개방 여부까지 확인할 수 있다는 점이 큰 장점입니다.

PortQry로 UDP/TCP 포트 스캔하기

Windows Server 2003용으로 배포된 첫 번째 버전의 PortQry는 Windows Server 2008 이상의 최신 운영체제에서 정상적으로 작동하지 않습니다. 따라서 현재는 마이크로소프트가 재배포한 두 번째 버전인 PortQryV2를 사용해야 합니다. 공식 마이크로소프트 다운로드 센터에서 PortQryV2를 내려받을 수 있습니다.

Windows 10 환경이라면 Chocolatey 패키지 관리자를 통해 간편하게 설치할 수도 있습니다:

choco install portqry

다운로드한 PortQryV2.exe 압축 파일을 해제한 후, 명령 프롬프트를 실행하고 유틸리티가 있는 디렉터리로 이동합니다. 예를 들어 다음과 같습니다:

cd c:\tools\PortQryV2

예를 들어 클라이언트에서 DNS 서버의 가용성을 확인하려면 해당 서버의 53번 TCP 및 UDP 포트가 열려 있는지 점검해야 합니다. 포트 확인 명령의 기본 문법은 다음과 같습니다:

PortQry -n server [-p protocol] [-e || -r || -o endpoint(s)]

  • -n: 가용성을 확인할 서버의 이름 또는 IP 주소
  • -e: 확인할 포트 번호 (1~65535)
  • -r: 확인할 포트 범위 (예: 1:80)
  • -p: 확인에 사용할 프로토콜. TCP, UDP 또는 BOTH 지정 가능 (기본값은 TCP)

참고: PowerShell의 Test-NetConnection cmdlet은 TCP 포트만 확인할 수 있지만, PortQry는 TCP와 UDP 프로토콜을 모두 지원합니다.

앞선 DNS 서버 확인 예제의 경우 명령어는 다음과 같이 작성합니다:

PortQry.exe –n 10.0.25.6 -p both -e 53

PortQry는 세 가지 포트 상태 중 하나를 반환합니다:

  • Listening – 포트가 열려 있고 연결을 수락 중이며, 해당 포트로부터 응답을 받았다는 의미입니다.
  • Not Listening – 대상 시스템에 지정된 포트에서 연결을 수락하는 프로세스(서비스)가 없다는 의미입니다. UDP 포트 확인 시 "Destination Unreachable – Port Unreachable" ICMP 응답을 받았거나, TCP 패킷에 Reset 플래그가 설정된 응답을 받은 경우 표시됩니다.
  • Filtered – PortQry가 지정된 포트로부터 어떠한 응답도 받지 못했거나 응답이 필터링되었다는 의미입니다. 즉, 해당 포트가 대상 시스템에서 리스닝 중이 아니거나 방화벽 또는 시스템 설정에 의해 접근이 제한된 상태입니다. 기본적으로 TCP 포트는 3회, UDP 포트는 1회 조회합니다.

예제에서 DNS 서버는 클라이언트로부터 TCP와 UDP 양쪽 모두 접근 가능한 것으로 확인됩니다:

TCP port 53 (domain service): LISTENING
UDP port 53 (domain service): LISTENING

-o 옵션을 사용하면 여러 포트를 나열하여 한 번에 가용성을 확인할 수 있습니다:

portqry -n 10.0.25.6 -p tcp -o 21,110,143

다음 명령은 잘 알려진 TCP/IP 포트 번호 범위를 스캔하고 연결을 수락하는 포트 목록을 반환합니다. 사실상 TCP 포트 스캐너로 동작하는 셈입니다:

portqry -n 10.0.25.6 -r 1:1024 | find ": LISTENING"

스캔 결과를 텍스트 파일로 저장할 수도 있습니다:

portqry -n 10.0.25.6 -p tcp -r 20:500 -l scan_port_log.txt

인터랙티브 모드 활용

portqry 유틸리티는 인터랙티브 모드도 지원합니다:

portqry –i

PortQry Interactive Mode 프롬프트에서 원격 컴퓨터 이름과 포트 번호를 지정할 수 있습니다:

node srv-lic
set port=80

지정된 서버의 포트를 확인하려면 q를 입력하고 Enter 키를 누르면 됩니다.

포트 및 프로세스 모니터링

-wport-wpid 인수를 사용하면 로컬 호스트에서 특정 포트(wport)의 상태나, 지정된 프로세스(wpid)와 연관된 모든 포트의 상태를 지속적으로 모니터링할 수 있습니다.

예를 들어 다음 명령은 지정된 로컬 포트(RDP 포트 3389)의 응답을 10분간 모니터링하고, 상태가 변경되면 관리자에게 알립니다. 상세 로그는 LogFile.txt에 기록되며, 모니터링을 중지하려면 Ctrl-C를 누릅니다:

portqry -wport 3389 -wt 600 –l LogFile.txt -y -v

로컬 컴퓨터의 열린 포트와 활성 TCP/UDP 연결 정보를 확인하려면 다음 명령을 사용합니다:

portqry.exe -local

주요 네트워크 서비스 포트 상태 고급 확인

PortQry는 일부 네트워크 서비스에 대한 기본적인 지원을 내장하고 있습니다. LDAP, RPC(Remote Procedure Calls), SMTP/POP3/IMAP4 같은 메일 프로토콜, SNMP, FTP/TFTP, NetBIOS Name Service, L2TP 등이 여기에 해당합니다. 단순히 포트 개방 여부만 확인하는 것이 아니라, 프로토콜에 특화된 요청을 전송하여 서비스의 실제 상태까지 파악할 수 있습니다.

예를 들어 다음 명령으로 RPC 엔드포인트 매퍼 서비스(TCP/135)의 가용성을 확인하고, 해당 컴퓨터에 등록된 RPC 엔드포인트 목록(UUID, 바인딩 주소, 연관 애플리케이션 이름 포함)을 받아볼 수 있습니다:

portqry -n 10.0.25.6 -p tcp -e 135

TCP port 135 (epmap service): LISTENING
Using ephemeral source port
Querying Endpoint Mapper Database…
Server's response:
UUID: d95afe72-a6d5-4259-822e-2c84da1ddb0d
ncacn_ip_tcp:10.0.25.6 [49152]
UUID: 8975497f-93f3-4376-9c9c-fd2277495c27 Frs2 Service
ncacn_ip_tcp:10.0.25.6 [5722]
UUID: 6b5bd21e-528c-422c-af8c-a4079be4a448 Remote Fw APIs
ncacn_ip_tcp:10.0.25.6 [63006]
UUID: 12345678-1234-abcd-ef22-0123456789ab IPSec Policy agent endpoint
ncacn_ip_tcp:10.0.25.6 [63006]
……..
UUID: 3c4428c5-f0ab-448b-bda1-6ce01eb0a6d5 DHCP Client LRPC Endpoint
ncacn_ip_tcp:10.0.25.6 [49153]
Total endpoints found: 61
==== End of RPC Endpoint Mapper query response ====
portqry.exe -n 10.0.25.6 -e 135 -p TCP exits with return code 0x00000000.

Microsoft SQL Server에서 실행 중인 SQL Server Browser 서비스의 응답도 확인할 수 있습니다:

PortQry.exe -n rome-sql01 -e 1434 -p UDP

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName ROME-SQL01
InstanceName MSSQLSERVER
IsClustered No
Version 15.0.2000.5
tcp 53200

ServerName ROME-SQL01
InstanceName DBINVENT
IsClustered No
Version 15.0.2000.5
tcp 1433
==== End of SQL Server query response ====
UDP port 1434 is LISTENING

실행 결과를 보면 PortQry가 1434/UDP 포트의 개방 여부뿐만 아니라 SQL Server 버전, 실행 중인 인스턴스 이름, 각 인스턴스의 TCP 포트까지 함께 보여주는 것을 알 수 있습니다. DBINVENT 인스턴스는 기본 포트인 TCP/1433에서 리스닝 중이며, MSSQLSERVER 인스턴스는 RPC 범위의 고정 포트인 TCP/53200을 사용합니다.

커뮤니티 이름(community name)을 지정하여 장비의 SNMP 포트를 조회할 수도 있습니다:

portqry -n rome-sql1 -cn !snmp_trap! -e 161 -p udp

SMTP 서버의 TCP/25 포트를 확인하면 서비스의 SMTP 배너 정보를 받아올 수 있습니다:

portqry -n mx.example.com -p tcp -e 25

GUI 버전 PortQueryUI 소개

원래 PortQry는 콘솔(CLI) 전용 도구였습니다. 명령 프롬프트 사용이 익숙하지 않은 사용자들의 편의를 위해 마이크로소프트는 portqry용 간단한 그래픽 인터페이스인 PortQueryUI를 개발했습니다. 공식 마이크로소프트 다운로드 센터에서 PortQueryUI를 내려받을 수 있습니다.

실제로 PortQueryUI는 portqry의 그래픽 애드온으로, 명령어를 자동 생성하고 결과를 그래픽 창에 표시해 줍니다.

또한 PortQueryUI에는 자주 사용되는 마이크로소프트 서비스의 가용성을 확인할 수 있는 사전 정의된 쿼리 세트가 포함되어 있습니다:

  • Domain and Trusts (Active Directory 도메인 컨트롤러의 ADDS 서비스 확인)
  • Exchange Server
  • SQL Server
  • Networking
  • IP Sec
  • Web Server
  • Net Meeting

사용법은 매우 직관적입니다. 원격 서버의 DNS 이름 또는 IP 주소를 입력하고, 사전 정의된 서비스 중 하나를 선택하거나(Query predefined service) 포트 번호를 직접 입력하여(Manually input query ports) 수동으로 포트를 확인한 뒤 Query 버튼을 클릭하면 됩니다.

PortQueryUI에서 반환 가능한 코드는 다음과 같습니다:

  • 0 (0x00000000) – 연결이 성공적으로 설정되었으며 포트가 사용 가능함
  • 1 (0x00000001) – 지정된 포트를 사용할 수 없거나 필터링됨
  • 2 (0x00000002) – UDP 연결 확인 시 반환되는 일반 코드. ACK 응답이 반환되지 않기 때문임