netstat -tuln | grep
检查监听状态。,2. 通过 ss -tuln | grep
快速查看(推荐)。,3. 用 lsof -i :
显示占用进程。,4. 测试连接:telnet
或 nc -zv
。,5. 扫描工具:nmap -p
。使用 netstat
命令(经典工具)
netstat
是传统网络工具,可查看所有活跃连接和监听端口。
操作步骤:
sudo netstat -tuln | grep <端口号>
参数解析:
-t
:TCP 端口-u
:UDP 端口-l
:仅显示监听中的端口-n
:以数字形式显示端口(不解析服务名)
示例:
检查 80
端口是否监听:
sudo netstat -tuln | grep :80
输出说明:
若返回 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
,表示端口已打开。
使用 ss
命令(推荐替代方案)
ss
(Socket Statistics)是 netstat
的现代替代品,速度更快、功能更全。
操作步骤:
sudo ss -tuln | grep <端口号>
参数同 netstat
,输出格式更简洁。
示例:
检查 22
端口(SSH):
sudo ss -tuln | grep :22
使用 lsof
命令(查看进程占用)
lsof
可显示端口关联的进程,适合定位服务冲突。
操作步骤:
sudo lsof -i :<端口号>
示例:
检查 3306
端口(MySQL):
sudo lsof -i :3306
输出说明:
若返回进程信息(如 mysqld
),则端口被占用。
使用 nmap
工具(网络扫描)
nmap
可扫描本地或远程主机端口状态,功能强大。
安装与使用:
sudo apt install nmap # Debian/Ubuntu sudo yum install nmap # CentOS/RHEL nmap -p <端口号> localhost # 扫描本机
示例:
扫描本机 443
端口:
nmap -p 443 localhost
输出关键字段:
open
:端口开放closed
:端口关闭但可访问filtered
:被防火墙拦截
使用 telnet
或 nc
(测试连通性)
Telnet(测试TCP端口)
telnet <目标IP> <端口号>
示例:
测试远程主机的 80
端口:
telnet 192.168.1.100 80
结果判断:
- 连接成功 → 端口开放
Connection refused
→ 端口关闭- 超时无响应 → 防火墙拦截
Netcat(nc)(支持TCP/UDP)
nc -zv <目标IP> <端口号> # TCP测试 nc -zuv <目标IP> <端口号> # UDP测试
参数说明:
-z
:扫描模式-v
:显示详细信息-u
:UDP协议
检查防火墙状态
端口未打开可能是防火墙阻止,需检查以下配置:
iptables(传统防火墙)
sudo iptables -L -n | grep <端口号>
firewalld(现代防火墙)
sudo firewall-cmd --list-ports | grep <端口号>
若端口被拦截:
开放端口(以 firewalld
为例):
sudo firewall-cmd --add-port=<端口号>/tcp --permanent sudo firewall-cmd --reload
端口状态排查流程图
graph TD A[端口是否打开?] --> B{使用 ss/netstat 检查监听状态} B -->|是| C[端口正常开放] B -->|否| D{使用 telnet/nc 测试连通性} D -->|连接成功| E[远端服务正常] D -->|连接失败| F{检查防火墙} F -->|防火墙放行| G[服务未运行或配置错误] F -->|防火墙拦截| H[需添加规则]
总结与建议
- 快速诊断:优先使用
ss
或netstat
检查本地监听。 - 远程测试:用
telnet
/nc
验证网络连通性。 - 深度分析:
nmap
扫描或lsof
定位进程。 - 防火墙规则:始终检查 iptables/firewalld 配置。
安全提示:
- 避免在公共网络暴露敏感端口(如 MySQL 的 3306)。
- 使用
nmap
扫描他人主机前需获得授权。- 生产环境修改防火墙前务必备份规则。
引用说明参考 Linux man 手册(man netstat
/man ss
/man nmap
)及 Red Hat/CentOS 官方防火墙文档,确保方法权威可靠。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/17736.html