如何查看服务器端口是否开放:多平台实操方法
如何查看服务器端口是否开放分为本地查看监听端口、远程探测端口连通两类操作,Windows优先使用PowerShell内置Test-NetConnection,Linux/macOS推荐nc命令,本地查询可使用netstat或ss,本地查询仅能确认服务器程序是否监听端口,无法验证外网防火墙、云服务器安全组是否放行,远程探测才能确认外部访问可用性;telnet在新版系统默认未安装,仅适合临时快速测试,UDP端口无法通过telnet和Test-NetConnection直接检测,需要使用nc工具,所有端口探测操作仅可在你拥有管理权限的服务器或网络环境执行,未经授权扫描第三方服务器会违反网络相关管理规范。
服务器端口检测工具对比
| 工具命令 | 运行位置 | 支持协议 | 额外要求 |
|---|---|---|---|
| Test-NetConnection | Windows远程终端 | TCP | 系统内置,无需安装 |
| nc | Linux、macOS、Windows | TCP、UDP | 部分系统需要手动安装 |
| netstat/ss | 服务器本地 | TCP、UDP | 仅查看本机监听端口 |
| telnet | Windows、Linux | TCP | 新版系统默认不预装,不推荐长期使用 |
本地查看服务器监听端口
登录服务器系统,在服务器本机执行命令,查看本机上哪些端口处于监听状态,代表服务程序已经启动并绑定端口。Windows服务器以管理员身份打开命令提示符,执行netstat-ano,-a参数显示全部连接与监听端口,-n不解析域名加速输出,-o显示对应进程PID,你可以结合任务管理器PID定位占用端口的程序。Linux服务器优先使用ss-tuln,相比netstat查询速度更快,输出内容包含监听地址、端口与协议类型,t代表TCP,u代表UDP,l仅筛选监听端口,n以数字形式展示端口不做域名解析。
本地查询的局限很明确。就算本地命令显示端口处于监听状态,外部网络依旧可能访问失败,原因集中在服务器系统防火墙、云厂商安全组策略拦截数据包,这也是本地检测不能替代远程探测的核心原因。
本地监听,不等于外网可达。
Windows远程探测服务器端口
打开PowerShell,输入Test-NetConnection服务器IP-Port端口号,例如Test-NetConnection120.xx.xx.xx-Port22。查看输出中TcpTestSucceeded字段,值为True代表端口开放且网络通路正常;值为False代表连接失败,失败诱因包含服务未启动、防火墙拦截、安全组未放行、网络路由异常。telnet服务器IP端口号也可以完成TCP端口测试,出现黑屏窗口代表端口连通,提示无法打开连接则端口不通,Windows10及以上版本默认不带telnet组件,需要在Windows功能里手动开启。
Linux和macOS远程探测服务器端口
nc是这两个平台的首选探测工具,执行nc-zv服务器IP端口号,参数z代表扫描模式不发送额外数据,v输出详细日志。返回succeeded提示表示端口开放;connectionrefused提示表示目标服务器收到请求,但没有程序监听这个端口;超时提示说明数据包在中途被防火墙或安全组丢弃。探测UDP端口,命令改为nc-zvu服务器IP端口号,UDP属于无连接协议,探测结果存在一定概率出现误判,建议多次复测。
排查端口不通的顺序
- 登录目标服务器,用ss或netstat确认业务服务正常监听对应端口
- 检查服务器操作系统防火墙规则,放行对应协议与端口
- 云服务器登录控制台,核查安全组入站规则是否允许探测源IP访问该端口
- 在同内网设备远程探测,区分是内网阻断还是外网阻断
- 切换不同网络环境再次探测,排除本地出口防火墙拦截
云服务器场景中,安全组是高频拦截点,很多情况服务正常监听、系统防火墙放行,外网访问依旧失败,就是安全组没有添加入站放行规则。端口放行修改后,策略生效一般需要数十秒,修改后立刻检测容易得到错误结果,等待片刻再复测可以减少误判。
端口扫描不能用于批量探测陌生IP。批量扫描外部IP会触发运营商、云平台的安全告警,严重时会触发封禁。仅针对自己名下服务器做单端口验证,属于常规运维操作。
