如何查看端口是否关闭:多系统检测方法
如何查看端口是否关闭,Windows系统可使用cmd命令netstat、telnet、PowerShell,Linux系统依靠ss或netstat命令,telnet仅能检测远程端口连通性,无法直接读取本机端口监听状态,该系列方法适用于本地服务器、虚拟机、局域网设备,无法检测被防火墙拦截后外部视角的端口状态,你需要区分端口未监听和防火墙阻断两种完全不同的关闭场景,端口未监听代表程序没有绑定端口,防火墙阻断代表程序已监听但外部无法访问。
端口查看命令与适用场景
Windowscmd窗口输入netstat-ano,会列出本机所有端口,找到目标端口对应的行,LISTENING表示端口正在监听也就是端口开放,端口条目完全不存在即为端口关闭,最后一列数字是进程PID,打开任务管理器详细面板,输入PID就能找到占用该端口的程序。这个命令仅读取本机操作系统端口列表,不受外网防火墙影响,适合排查本机服务是否正常启动。
PowerShell中使用Test-NetConnection目标IP-Port端口号,执行后查看TcpTestSucceeded字段,值为False代表端口关闭或无法连通,True代表端口开放,该工具内置在Windows8及更新版本系统,不需要额外安装组件,相比telnet,命令返回信息更完整,报错原因更容易判断。
| 检测工具 | 操作系统 | 检测对象 | 局限 |
|---|---|---|---|
| netstat | Windows、Linux | 本机监听端口 | 无法穿透防火墙 |
| Test-NetConnection | Windows | 远程端口连通 | 不能看本机进程绑定 |
| ss | Linux | 本机监听端口 | 旧精简系统可能缺失 |
| telnet | 全平台,需手动安装 | 远程端口连通 | 端口关闭只提示连接失败 |
Linux系统执行ss-tulpn,t代表tcp协议,u代表udp协议,l筛选监听状态端口,p显示占用进程名称,n直接展示数字端口不解析域名,目标端口不在输出列表中,说明端口关闭。ss命令读取内核套接字信息,执行速度比旧netstat更快,多数现代Linux发行版默认自带。
区分两种端口关闭的不同成因。
本机netstat能查到LISTENING,但远程机器测试端口不通,不是端口关闭,是服务器防火墙或者云服务商安全组拦截访问,程序已经正常绑定端口,只是外部流量被拦截。本机netstat找不到目标端口,才是端口本身关闭,对应的服务程序没有启动,或者配置文件中端口参数修改错误。
UDP端口检测存在特殊限制,UDP属于无连接协议,telnet、Test-NetConnection这类tcp检测工具不能有效判断UDP端口是否关闭,你需要使用nc工具发送数据包来验证,单纯依靠tcp类检测命令会误判UDP端口状态。
云服务器场景,仅在服务器内部执行端口查看命令,只能确认本机端口监听情况,不能代表公网访问状态,云平台安全组独立于操作系统防火墙,即使本机端口开放,安全组未放行对应端口,外网访问依然判定端口关闭。
检测远程服务器端口时,若目标服务器存在路由屏蔽,会出现连接超时,该结果和端口直接拒绝访问的含义不同,连接超时大概率是链路或防火墙丢弃数据包,端口拒绝则代表服务器收到请求,但端口没有程序监听,也就是端口关闭。
