在 Windows 上检查开放端口是每个具有网络意识的用户都应该掌握的技能。开放端口意味着你的计算机正在主动监听该端口号上的连接,了解哪些端口是开放的可以帮助你发现安全漏洞、排查连接问题,并验证应用程序是否正常运行。Windows 提供了多种内置方法来完成此操作,此外还有外部工具可以测试你的端口从外部看起来如何。
内容目录
什么是开放端口以及为什么它们很重要
计算机上的每个网络服务都绑定到 1 到 65535 之间的端口号。当服务正在运行并等待传入连接时,该端口是"开放的"。当没有任何东西在监听时,端口是"关闭的",传入的连接尝试会被拒绝或忽略。
以下是为什么这在实践中很重要:
- 安全审计: 意外的开放端口可能意味着恶意进程、恶意软件或配置错误的服务正在暴露你的计算机。
- 故障排查: 如果你的网络服务器、游戏服务器或远程桌面无法访问,首先要问的是该端口是否真的是开放的。
- 防火墙验证: 你的 Windows 防火墙可能会阻止一个端口,即使该服务正在运行,或允许一个你认为已关闭的端口。
使用 Netstat 命令查看开放端口
netstat
netstat
命令是列出 Windows 计算机当前正在监听的每个端口的最快内置方法。打开命令提示符(在开始菜单中搜索"cmd",右键单击,然后选择"以管理员身份运行")并运行:
netstat -ano
标志的含义如下:
-
-a显示所有活动连接和监听端口。 -
-n以数字形式显示地址和端口号,而不是解析主机名(速度更快)。 -
-o添加进程 ID(PID),以便你可以识别哪个程序拥有每个端口。
输出列为: Proto 、 Local Address 、 Foreign Address 、 State 和 PID 。查找 State 列显示 LISTENING 的行。这些就是你的开放端口。
要仅缩小到监听端口:
netstat -ano | findstr LISTENING
一旦你有了想要调查的 PID,可以使用以下命令查找进程名称:
tasklist /fi "PID eq 1234"
将
1234
替换为 netstat 输出中的实际 PID。这会告诉你确切是哪个可执行文件正在监听该端口。
要检查特定端口是否被使用,请将 netstat 与 findstr 结合:
netstat -ano | findstr :443
使用 PowerShell 检查端口
PowerShell 提供了一个比 netstat 更清晰、更可脚本化的替代方案。以管理员身份打开 PowerShell 并运行:
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess | Sort-Object LocalPort
这会返回一个已排序的列表,包含所有处于 LISTEN 状态的 TCP 端口,包括本地地址和 PID。要在同一命令中将 PID 解析为进程名称:
Get-NetTCPConnection -State Listen |
Select-Object LocalPort,
@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}} |
Sort-Object LocalPort
你也可以直接从 PowerShell 使用
Test-NetConnection
测试远程主机上的特定端口是否开放:
Test-NetConnection -ComputerName example.com -Port 443
如果
TcpTestSucceeded : True
出现在输出中,说明端口是开放的并正在接受来自你的计算机的连接。这对于验证从 Windows PC 到服务器的出站连接很方便,而不仅仅是检查本地开放了什么。
检查 Windows 防火墙设置中的端口规则
Windows 防火墙控制允许进出的端口。一个服务可能在本地监听某个端口,但如果防火墙阻止该端口上的入站流量,外部客户端就无法访问它。以下是如何查看你的防火墙规则。
使用 Windows Defender 防火墙和高级安全
-
按
Win + R
,输入
wf.msc并按 Enter。 - 点击 入站规则 左侧面板中的,查看控制进入你的计算机的流量的规则。
- 点击 出站规则 查看离开你的计算机的流量。
- 按 启用 排序,快速查看哪些规则处于活动状态。
- 每条规则显示协议(TCP/UDP)、本地端口、远程端口和操作(允许/阻止)。
使用命令行
要从命令行列出所有活动的防火墙规则:
netsh advfirewall firewall show rule name=all
要检查特定端口是否通过防火墙允许:
netsh advfirewall firewall show rule name=all | findstr "LocalPort"
Microsoft 关于 配置 Windows 防火墙 的官方文档涵盖了规则创建和管理的详细内容,如果你需要添加或修改规则。
在 Windows 上使用端口扫描器
内置工具非常适合检查你自己的计算机,但有时你需要扫描网络上的另一台主机,或者你想要一个可视化的概览而不是原始的命令行输出。专用的端口扫描器可以填补这个空白。
Nmap 是端口扫描的行业标准。它是免费的、开源的,可以从 官方 Nmap 下载页面 获取 Windows 版本。Windows 安装程序包括 Zenmap,一个图形化前端。基本的主机扫描如下所示:
nmap -sV 192.168.1.1
-sV
-sV
标志尝试检测在每个开放端口上运行的服务版本。这对于 Windows 上的网络安全审计很有用,因为你可以看到不仅哪些端口是开放的,还可以看到它们后面运行的软件。
从外部测试你的开放端口
这是大多数指南忽略的关键区别:一个端口可能在你的 Windows 计算机上本地监听,但对外部世界仍然显示为关闭。当你的路由器没有转发该端口或你的 ISP 阻止它时,就会发生这种情况。要了解互联网实际看到的内容,你需要从外部角度进行测试。
这正是在线端口检查器所做的。它从远程服务器启动到你的 IP 地址的 TCP 连接,并报告连接是否被接受(开放)、被拒绝(关闭)或超时。无需安装软件,它完全绕过你的本地防火墙,显示真实的外部视图。
查看 Windows 计算机上的确切开放端口
我们的免费在线端口检查器从外部服务器测试到任何 IP 或域的 TCP 连接,因此在检查 Windows 上的开放端口时,你可以获得真实的外部视图。检查单个端口或一次批量检查最多 10 个,毫秒级的结果。
检查你的开放端口 →
常见端口快速参考
了解哪些服务使用哪些端口可以在故障排查时节省时间。以下是你在 Windows 系统上最常遇到的端口:
| 端口 | 协议 | 服务 | 在 Windows 上的常见用途 |
|---|---|---|---|
| 80 | TCP | HTTP | 网络服务器(IIS、Apache)、本地开发服务器 |
| 443 | TCP | HTTPS | 安全网络服务器、Windows 更新 |
| 3389 | TCP | RDP | 远程桌面协议、远程管理 |
| 445 | TCP | SMB | 文件共享、Windows 网络共享 |
| 22 | TCP | SSH | OpenSSH(内置于 Windows 10/11) |
| 21 | TCP | FTP | 文件传输、IIS FTP 服务 |
| 25 | TCP | SMTP | 电子邮件发送、邮件服务器中继 |
| 3306 | TCP | MySQL | MySQL/MariaDB 数据库连接 |
| 5432 | TCP | PostgreSQL | PostgreSQL 数据库连接 |
| 135 | TCP | RPC | Windows 远程过程调用、DCOM |
关闭你不需要的端口
良好的 Windows 端口监控不仅仅是找出什么是开放的。它是关于决定什么应该是开放的,并关闭其他所有东西。以下是一个实用的方法:
- 运行 netstat -ano 并列出所有 LISTENING 端口。 使用前面展示的 tasklist 命令将每个 PID 映射到进程名称。
-
识别你不需要的服务。
例如,如果你没有使用 IIS,就没有理由让端口 80 或 443 在本地开放。通过
services.msc停止服务。 -
查看 Windows 防火墙入站规则。
打开
wf.msc并禁用任何允许流量到你已识别为不必要的端口的规则。 - 检查你的路由器。 路由器上的端口转发规则可以暴露端口,即使 Windows 防火墙在操作系统级别阻止它们。登录你的路由器管理面板并审计转发的端口。
- 从外部重新测试。 进行更改后,再次运行外部端口检查,确认这些端口不再可访问。
CISA 网络安全公告 定期发布关于在野外被利用的特定端口的警报。如果你管理 Windows 服务器,定期检查该列表是一个好习惯。
本地开放端口意味着你的 Windows 计算机上的服务正在主动监听该端口号上的连接。外部开放端口意味着互联网上的外部计算机实际上可以访问它。你的路由器、ISP 或 Windows 防火墙可以阻止外部访问,即使端口在本地监听。始终从外部工具测试以确认真实世界的状态。
这几乎总是由以下三个原因之一造成的:Windows 防火墙有入站规则阻止该端口,你的路由器没有该端口的端口转发规则,或你的 ISP 在网络级别阻止该端口。按顺序检查每一层。常见的 ISP 阻止端口包括 25(SMTP)、80 和 443 在住宅连接上。
将 RDP 直接暴露给互联网是一个重大的安全风险。自动机器人持续扫描开放的端口 3389 并尝试暴力破解登录。如果你需要远程访问,首先使用 VPN 访问你的网络,在 Windows 防火墙中限制 RDP 访问到特定 IP 地址,或使用非标准端口加上强密码和网络级身份验证(NLA)。
使用
-a
标志时,Netstat 确实会显示 UDP 端口。在 Proto 列中查找标记为
UDP
的行。但是,UDP 没有像 TCP 那样的连接握手,所以远程测试要困难得多。大多数在线端口检查器,包括基于 TCP 的工具,仅测试 TCP 连接。对于 UDP 扫描,带有
-sU
标志的 Nmap 是实用选项,尽管它需要管理员权限。
打开
wf.msc
,点击"入站规则",然后点击右侧的"新规则"。选择"端口",选择 TCP 或 UDP,输入端口号,选择"允许连接",将其应用到适当的配置文件(域、专用、公共),并为规则命名。对于命令行爱好者,使用:
netsh advfirewall firewall add rule name="MyPort" dir=in action=allow protocol=TCP localport=8080
。
超时意味着端口检查器发送了 TCP 连接请求,但在等待期间(通常是几秒钟)没有收到响应。这通常意味着防火墙默认丢弃数据包而不是主动拒绝它们。"关闭"结果意味着主机发送回 TCP 重置,主动拒绝连接。超时在丢弃而不是拒绝流量的严格防火墙配置中更常见。