最全命令与工具指南(2025新版)
目录导读
- 为什么需要查询服务器开放端口?
- Linux系统查询开放端口的5种核心方法
- Windows系统查询开放端口的3种实用技巧
- 使用远程工具扫描端口(安全注意事项)
- 常见问题与答案(FAQ)
- 端口管理最佳实践
为什么需要查询服务器开放端口?
在服务器运维中,端口是网络通信的“门”,每个服务(如Web、数据库、SSH)都会占用特定的端口号,查询开放端口的目的包括:

- 安全审计:发现未授权的开放端口,防止黑客利用(不必要的Telnet端口可能导致暴力破解)。
- 故障排查:确认服务是否正常监听(如Nginx是否在80端口运行)。
- 合规要求:满足PCI-DSS等标准对端口最小化原则的要求。
核心概念:端口分为TCP和UDP,默认范围是0-65535,常见端口如22(SSH)、80(HTTP)、443(HTTPS)。
Linux系统查询开放端口的5种核心方法
方法1:使用ss命令(最推荐)
socket statistics是Linux现代工具,性能优于netstat:
# 列出所有监听中的TCP/UDP端口(含进程) ss -tuln
参数详解:-t TCP,-u UDP,-l 仅显示监听中的端口,-n 不解析服务名,输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
最佳用法:配合grep过滤特定端口:
ss -tuln | grep :80
方法2:netstat命令(经典兼容)
如果系统未预装ss,可用netstat:
netstat -tuln | grep LISTEN
注意:现代Linux已逐步淘汰netstat(属于net-tools包),但CentOS 7以前版本仍常用,若遇command not found,请安装:
yum install net-tools -y 或 apt install net-tools -y
方法3:lsof命令(查看具体进程)
想确认哪个进程占用了特定端口?用lsof:
# 查看所有监听中的TCP端口 lsof -i -P -n | grep LISTEN
参数:-i 显示网络文件,-P 不转换端口号,-n 不解析主机名,简化版查询80端口:
lsof -i :80
方法4:nmap本地扫描(全面检测)
本地安装nmap后,扫描本机所有开放端口:
nmap -sT -O localhost
-sT 使用TCP Connect扫描,-O 识别操作系统。注意:某些云服务器可能限制本地nmap权限。
方法5:fuser命令(快速定位端口)
调试时可用fuser查看端口是否被占用:
# 查看80端口对应的进程PID fuser 80/tcp
返回PID后,用ps -ef | grep PID确认进程。
Windows系统查询开放端口的3种实用技巧
技巧1:netstat -an(CMD最常用)
打开命令提示符(管理员权限),输入:
netstat -an | findstr LISTEN
输出示例:
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
若要关联进程,使用-o参数:
netstat -ano | findstr :3389
记下PID后,在任务管理器中“详细信息”列查找进程名。
技巧2:Get-NetTCPConnection(PowerShell新时代)
PowerShell提供更清晰的输出:
Get-NetTCPConnection -State Listen | Select LocalPort, OwningProcess
此命令仅显示TCP监听端口,并给出进程PID,可进一步用Get-Process -Id PID查看具体程序。
技巧3:图形化工具TCPView(微软官方)
从Sysinternals套件下载TCPView(https://learn.microsoft.com/en-us/sysinternals/downloads/tcpview),无需安装,直接运行即可实时查看所有TCP/UDP端点及其进程。
使用远程工具扫描端口(安全注意事项)
必备工具:nmap(跨平台)
扫描远程服务器开放端口(需获得授权):
nmap -p 1-65535 你的服务器IP
参数:-p 指定端口范围,-sV 探测服务版本。重要:扫描他人服务器前必须获得书面授权,否则可能触犯法律。
在线端口扫描工具
- YouGetSignal:https://www.yougetsignal.com/tools/open-ports/
- Port Checker:https://portchecker.co/
仅支持测试单个常见端口(如80、443),不能用于全端口扫描。
安全警告
- 禁止扫描非授权设备:在云环境(如AWS、阿里云)中,未经授权的端口扫描会被视为攻击行为,可能导致账号封禁。
- 关闭不必要的端口:查询到开放端口后,应使用
iptables(Linux)或Windows防火墙关闭不需要的服务。
常见问题与答案(FAQ)
Q1:为什么netstat显示“command not found”?
A:多数现代Linux发行版已移除net-tools包,解决方法:使用ss命令(通常预装),或通过包管理器安装net-tools。
Q2:查询端口时,如何区分TCPUDP?
A:ss -t只显示TCP,-u只显示UDP,Windows的netstat -an会显示协议列(TCP/UDP)。
Q3:端口状态“LISTEN”和“ESTABLISHED”有什么区别?
A:LISTEN表示服务正在等待连接(开放的端口);ESTABLISHED表示已建立活动的TCP连接。
Q4:端口扫描时出现“filtered”是什么意思?
A:表示防火墙或安全组阻止了探测,端口可能开放但被规则屏蔽,也可能关闭,需要检查服务器的安全策略。
Q5:如何查询某个程序正在使用的端口?
A:Linux用lsof -i :端口号;Windows用netstat -ano | findstr 端口号,然后通过PID定位进程。
Q6:端口范围为什么是0-65535?
A:TCP/UDP协议使用16位端口号(2^16=65536),其中0号端口保留,实际可用范围1-65535。
端口管理最佳实践
- 定期审计:每月运行
ss -tuln检查开放端口,对比业务需要。 - 最小化原则:仅开放必要端口(如Web、SSH),关闭所有监听在0.0.0.0的未授权端口。
- 绑定本地地址:如果服务仅需本地访问(如数据库),应监听
0.0.1而非0.0.0。 - 使用防火墙:即使端口开放,也通过
iptables或云安全组限制来源IP(如仅允许公司IP访问SSH)。 - 日志监控:记录端口连接日志,发现异常扫描立即响应。
示例实战:假设你发现
ss -tuln显示端口4444处于LISTEN状态,但确认这不是你的业务端口,立即检查进程(lsof -i :4444),若发现未知进程,使用kill -9 PID终止,并排查是否被植入后门。
通过上述方法,无论是运维新手还是资深工程师,都能高效、安全地查询服务器开放端口,保障系统安全稳定运行。