Windows có nhiều công cụ để chẩn đoán vấn đề trong mạng TCP/IP (ping, telnet, pathping, v.v.). Nhưng không phải tất cả cho phép bạn kiểm tra trạng thái hoặc quét các cổng mạng mở trên máy chủ từ xa một cách thuận tiện. Tiện ích Portqry.exe là một công cụ tiện lợi để kiểm tra phản hồi của cổng TCP/UDP trên các máy chủ từ xa để chẩn đoán các vấn đề liên quan đến hoạt động của các dịch vụ mạng và tường lửa trong mạng TCP/IP. Thường thì, tiện ích Portqry được dùng như một sự thay thế chức năng hơn cho lệnh telnet, và không giống telnet, nó cũng cho phép bạn kiểm tra cổng UDP mở.
Quét Cổng UDP/TCP Mở với PortQry
Phiên bản đầu tiên của PortQry cho Windows Server 2003 không hoạt động đúng trong các phiên bản OS mới hơn (Windows Server 2008 và mới hơn), vì vậy phiên bản thứ hai của tiện ích, PortQryV2, đã được phát hành. Đó là phiên bản bạn nên sử dụng ngày nay (bạn có thể tải PortQryV2 tại đây).
Trên Windows 10, bạn có thể cài đặt PortQry bằng trình quản lý gói Chokolatey với lệnh:
choco install portqry
Tải xuống và giải nén lưu trữ PortQryV2.exe. Chạy command prompt và đi đến thư mục chứa tiện ích, ví dụ:
cd c:\tools\PortQryV2

Ví dụ: để kiểm tra tính khả dụng của máy chủ DNS từ client, bạn cần kiểm tra xem cổng 53 TCP và UDP có mở trên nó hay không. Cú pháp lệnh kiểm tra cổng như sau:
PortQry -n server [-p protocol] [-e || -r || -o endpoint(s)]
- -n là tên hoặc địa chỉ IP của máy chủ mà bạn đang kiểm tra;
- -e là số cổng cần kiểm tra (từ 1 đến 65535);
- -r là dải cổng cần kiểm tra (ví dụ, 1:80);
- -p là giao thức dùng để kiểm tra. Có thể là TCP, UDP hoặc BOTH (TCP được dùng mặc định).
Lưu ý. Khác với cmdlet Test-NetConnection PowerShell chỉ có thể kiểm tra tính khả dụng của cổng TCP, tiện ích PortQry hỗ trợ cả hai giao thức TCP và UDP.
Trong ví dụ của chúng ta, lệnh trông như sau:
PortQry.exe –n 10.0.25.6 -p both -e 53

Portqry sẽ trả về một trong ba trạng thái cổng có sẵn:
- Listening – có nghĩa là cổng đang mở (chấp nhận kết nối), đã nhận được phản hồi từ nó;
- Not Listening – cho thấy không có quy trình (dịch vụ) nào trên hệ thống đích chấp nhận kết nối trên cổng được chỉ định. PortQry nhận được phản hồi ICMP “Destination Unreachable – Port Unreachable” khi kiểm tra cổng UDP, hoặc gói TCP với cờ Reset;
- Filtered – có nghĩa là PortQry chưa nhận được bất kỳ phản hồi nào từ cổng được chỉ định hoặc phản hồi đã bị lọc. Tức là, cổng này không lắng nghe trên hệ thống đích hoặc truy cập vào nó bị hạn chế bởi tường lửa hoặc một số cài đặt hệ thống. Mặc định, cổng TCP được thăm dò 3 lần, và UDP là một lần.
Trong ví dụ của chúng ta, máy chủ DNS có sẵn từ client cả qua cổng TCP và UDP.
TCP port 53 (domain service): LISTENING UDP port 53 (domain service): LISTENING
Sử dụng thuộc tính -o, bạn có thể chỉ định chuỗi cổng để kiểm tra tính khả dụng của chúng:
portqry -n 10.0.25.6 -p tcp -o 21,110,143
Lệnh tiếp theo quét các dải số cổng TCP/IP phổ biến và trả về danh sách các cổng chấp nhận kết nối (hoạt động như TCP Port Scanner):
portqry -n 10.0.25.6 -r 1:1024 | find ": LISTENING"
Bạn có thể lưu kết quả quét cổng mở vào file văn bản:
portqry -n 10.0.25.6 -p tcp -r 20:500 -l scan_port_log.txt
Tiện ích portqry có chế độ tương tác:
portqry –i
Bây giờ, tại dấu nhắc PortQry Interactive Mode, bạn có thể chỉ định tên máy tính từ xa và số cổng:
node srv-lic
set port=80
Để kiểm tra cổng trên máy chủ được chỉ định, nhấn q và Enter.

Sử dụng các đối số -wport và -wpid, bạn có thể giám sát trạng thái của cổng được chỉ định (wport), hoặc tất cả các cổng liên quan đến quy trình được chỉ định (wpid) trên máy chủ cục bộ.
Ví dụ: lệnh sau sẽ giám sát phản hồi của cổng cục bộ được chỉ định trong 10 phút (ví dụ: cổng RDP 3389), và nếu trạng thái của nó thay đổi, nó sẽ thông báo cho quản trị viên về điều này (nhật ký chi tiết sẽ có sẵn trong LogFile.txt). Để dừng giám sát cổng, nhấn Ctrl-C:
portqry -wport 3389 -wt 600 –l LogFile.txt -y -v
Bạn có thể lấy thông tin về các cổng mở và kết nối TCP/UDP hoạt động trên máy tính cục bộ:
portqry.exe -local
Trạng Thái Cổng Mở của Dịch Vụ Mạng Nâng Cao trong PortQry
PortQry có hỗ trợ tích hợp cho một số dịch vụ mạng. Chúng là LDAP, Remote Procedure Calls (RPC), giao thức email SMTP/POP3/IMAP4, SNMP, FTP/ TFTP, NetBIOS Name Service, L2TP, v.v. Ngoài việc kiểm tra tính khả dụng cổng, công cụ thực hiện các yêu cầu đặc thù giao thức để lấy trạng thái dịch vụ.
Ví dụ: sử dụng lệnh sau, bạn có thể kiểm tra tính khả dụng dịch vụ RPC endpoint mapper (TCP/135) và lấy danh sách tên các RPC endpoint đã đăng ký trên máy tính (kể cả tên, UUID, địa chỉ chúng được gắn liền và ứng dụng chúng liên quan đến).
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: 367abb81-9844-35f1-ad32-912345001003 ncacn_ip_tcp:10.0.25.6 [63002] UUID: 50cda2a3-574d-40b3-1d66-ee4aaa33a076 ncacn_ip_tcp:10.0.25.6 [56020] …….. 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.
Hoặc bạn có thể kiểm tra tính khả dụng và phản hồi từ dịch vụ SQL Server Browser chạy trên Microsoft SQL Server:
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
Như bạn thấy, công cụ PortQry không chỉ hiển thị tính khả dụng của cổng 1434/UDP, mà còn phiên bản SQL server và tên các instance chạy trên SQL server cùng cổng TCP của chúng. Instance DBINVENT đầu tiên lắng nghe trên cổng mặc định TCP/1433, và instance MSSQLSERVER thứ hai sử dụng cổng TCP/53200 cố định từ dải RPC.

Bạn có thể thăm dò cổng SNMP trên thiết bị bằng cách chỉ định tên community:
portqry -n rome-sql1 -cn !snmp_trap! -e 161 -p udp
Khi kiểm tra cổng TCP/25 trên máy chủ SMTP, bạn có thể lấy banner SMTP dịch vụ:
portqry -n mx.woshub.com -p tcp -e 25
Phiên Bản GUI PortQuery
Ban đầu, PortQry chỉ là công cụ console (CLI). Để làm cho nó thuận tiện hơn cho người dùng không thích dùng command prompt, Microsoft đã phát triển giao diện đồ họa đơn giản cho portqry – PortQueryUI. Bạn có thể tải PortQueryUI từ trang web tải xuống chính thức của Microsoft: PortQueryUI.
Thực tế, PortQueryUI là một add-on đồ họa cho portqry để tạo lệnh và trả về kết quả trong cửa sổ đồ họa.
Ngoài ra, PortQueryUI chứa một số bộ truy vấn được xác định trước để kiểm tra tính khả dụng của các dịch vụ Microsoft phổ biến:
- Domain and trusts (kiểm tra dịch vụ ADDS trên bộ điều khiển miền Active Directory)
- Exchange Server
- SQL Server
- Networking
- IP Sec
- Web Server
- Net Meeting
Tôi nghĩ PortQueryUI không cần bất kỳ bình luận đặc biệt nào. Nó nên rõ ràng nếu bạn nhìn vào ảnh chụp màn hình dưới đây. Nhập DNS name hoặc IP address của máy chủ từ xa, chọn một trong các dịch vụ được xác định trước (Query predefined service), hoặc chỉ định số cổng để kiểm tra cổng thủ công (Manually input query ports) và nhấp nút Query.

Các mã trả về có thể trong PortQueryUI (được highlight trong ảnh chụp):
- 0 (0x00000000) – kết nối đã được thiết lập thành công và cổng có sẵn;
- 1 (0x00000001) – cổng được chỉ định không có sẵn hoặc bị lọc;
- 2 (0x00000002 – mã trả về bình thường khi kiểm tra tính khả dụng kết nối UDP, vì phản hồi ACK không được trả về.