查询一个服务器IP的端口号,核心方法分两类:登录服务器本地用命令查看,或在外部用扫描工具探测;具体用哪种取决于你有没有服务器的登录权限。对运维人员和站长来说,查端口是排查故障、确认服务是否正常的日常操作,这篇文章会把本地查询、远程扫描、以及常见工具的使用场景一次讲清楚。
本地查询:有服务器权限时的准确做法
如果你能通过SSH或远程桌面登录服务器,本地查询是最准确、最直接的方式,不依赖网络状况,也不会被防火墙策略干扰结果。
Linux查看端口占用命令
Linux系统下查端口,业内专家推荐优先使用 ss 命令,它是 netstat 的现代替代品,速度更快,输出信息也更全。
第一种:查看所有监听中的端口
ss -tlnp
拆解一下参数含义:-t 只看TCP连接,-l 只显示LISTEN状态的端口,-n 用数字显示端口号而不做域名解析,-p 显示占用该端口的进程PID和名称,组合起来,你就能看到服务器上所有正在监听的TCP端口,以及是哪个程序在占用,这对排查“端口被谁占了”这类问题特别有效。
第二种:精确查询某个特定端口
如果只想确认一个具体端口,比如80端口有没有被Nginx监听,可以这样:
ss -tlnp | grep :80
Linux查看端口占用命令的输出会直接告诉你结果,有输出就说明在监听,没输出就说明没起服务。
第三种:老牌命令 netstat
虽然 ss 更现代,但很多老服务器上 netstat 依然可用,用法也几乎一样:
netstat -tlnp
如果提示 netstat 没安装,在CentOS上执行 yum install net-tools,在Ubuntu上执行 apt install net-tools 就能装上。
Windows服务器端口查询方法
Windows Server 用自带的 netstat 命令就能搞定,无需额外安装工具。
打开命令提示符(CMD)或PowerShell,输入:
netstat -ano
这里的 -a 显示所有连接和监听端口,-n 用数字形式显示地址和端口,-o 显示对应的进程PID,查看结果时注意看“State”列,LISTENING 状态的就是正在监听的端口。
通过PID反查进程名:看到端口占用的PID后,在任务管理器里用这个PID找到具体进程;或用一行命令直接查:
tasklist | findstr "PID号"
假设PID是1234,就写成 tasklist | findstr 1234,结果会直接显示是哪个程序,nginx.exe 或 java.exe。
根据服务名查端口:Windows上很多端口是系统服务开的,可以用:
netstat -ano | findstr "端口号"
比如想确认远程桌面3389端口状态,netstat -ano | findstr 3389 即可。
怎么查服务器开放了哪些端口:外部扫描方案
没有服务器登录权限,或者想从外部视角看自己的服务器暴露了哪些端口,就得靠端口扫描工具,这类工具的工作原理是向目标IP的特定端口发送TCP连接请求或UDP数据包,根据响应判断端口状态。
端口扫描工具哪个好用
Nmap 是行业标准,也是多数情况下最可靠的选择。 它免费、开源、跨平台,支持Windows、Linux、macOS,安装方式也很简单,Debian/Ubuntu执行 apt install nmap,CentOS执行 yum install nmap。
快速扫描常见端口
nmap -sT 服务器IP地址
这条命令会扫描该IP最常用的1000个端口。-sT 是TCP全连接扫描,准确性高,但速度相对慢,适合首次摸查。
全端口大扫描
nmap -p 1-65535 服务器IP地址
整个IP段所有端口逐一探测,耗时较长,但不会有遗漏,如果服务器对扫描有防护,可能结果不准,但对个人自查来说已经足够。
指定端口精确探测
nmap -p 80,443,3306 服务器IP地址
如果你想确认数据库的3306端口是否对外开放,这个命令能快速给出答案。
在线工具场景:手头没有Nmap,或者不太熟悉命令行时,可以用站长工具、YouGetSignal这类在线端口扫描网站,它们的作用方式基本一致:输入IP,勾选常用端口,网页就会反馈结果,但要注意,在线工具是从它们的服务器发起扫描,如果目标服务器的防火墙只允许特定IP访问,结果可能显示“关闭”,而实际上端口是开放的。
结果怎么看
扫描结果里,open 表示端口对外开放,filtered 表示被防火墙过滤,可能开放也可能没开放,最典型的例子:你用Nmap扫自己的云服务器,发现22端口是 open 的,说明SSH服务正常监听且防火墙放行了这个端口。
服务器端口不通怎么排查
查到端口号但连不上,这是比“不知道端口”更常见的困境,按下面顺序排查,绝大多数问题都能定位到。
第一步:确认服务本身在跑
Linux上执行 systemctl status 服务名,或直接看进程是否存活,进程没了,端口自然不存在。
第二步:确认监听地址没错
服务监听的地址决定了谁能访问。ss -tlnp 结果中如果看到 0.0.0:3306,说明监听在所有网卡上,外网可访问;如果看到 0.0.1:3306,说明只监听本地回环,外部IP根本连不上,这是很多新人容易踩的坑。
第三步:检查防火墙规则
云服务器有两种防火墙,缺一不可:
- 系统防火墙:Linux执行
iptables -L -n或firewall-cmd --list-all,Windows查看“高级安全Windows Defender防火墙” - 云平台安全组:在简米云、酷番云或AWS控制台里查找“安全组”或“安全策略”,确认入方向规则放行了目标端口
第四步:用telnet或nc做连通性测试
在本地电脑上执行 telnet IP地址 端口号,如果出现黑屏或连接成功提示,说明端口可达;如果提示“无法打开到主机的连接”,多半是防火墙拦截或服务未启动。
用 nc 命令测试也可以:
nc -zv 服务器IP地址 端口号
-z 表示只扫描不发送数据,-v 显示详细信息。
实战建议:从零查清一个IP的端口
假设你接手了一台前人留下的CentOS服务器,IP已知但密码刚重置,想摸清上面开了什么服务,推荐的流程:
- SSH登录服务器,执行
ss -tlnp查看本机监听的所有TCP端口,输出会显示Nginx在80/443,MySQL在3306,Redis在6379,但这些外网未必都能访问 - 执行
iptables -L -n看系统防火墙放行了哪些入方向流量 - 登录云控制台,检查安全组的入方向规则,对比你期望开放的端口是否一致
- 如果某个端口状态异常,用
ss -p定位进程,用systemctl status查看服务健康状态
这套流程走完,服务器对外敞开了哪些端口,哪些服务处于“监听但不可达”状态,就一清二楚了。
Q&A:怎么查一个服务器IP的端口号
Q:本地没有服务器权限,还有办法查端口吗?
可以,使用Nmap等外部扫描工具,执行 nmap -p 1-10000 目标IP,通过TCP连接响应来判断端口是否开放,需要注意,频繁扫描他人服务器可能违反服务商条款,建议先在合法授权下使用。
Q:查出端口开放但业务连不上,问题可能在哪?
先确认服务监听的地址是否为 0.0.0,而不是 0.0.1,其次检查云安全组和系统防火墙两层策略,然后用 telnet IP 端口 从客户端测试,其中一个细节常被忽略:部分云服务商的安全组默认规则不生效,需要在控制台显式添加放行规则。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/603656.html




