上一篇
如何检查Linux端口是否开放
- Linux
- 2025-06-12
- 4514
使用
netstat -tuln 或
ss -tuln 查看本地监听端口,检查远程端口可用
nmap -p 端口号 IP地址 或
telnet IP地址 端口号,成功连接或显示 LISTEN 状态表示端口开放。
使用 netstat 命令(经典工具)
netstat -tuln | grep <端口号>
- 参数解析
-t:TCP端口
-u:UDP端口
-l:仅显示监听中的端口
-n:以数字格式显示端口 - 示例
检查80端口:netstat -tuln | grep :80
- 输出解读
若返回tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN,表示80端口已开放。
适用场景:快速检查本地服务监听状态(需root权限查看所有端口)。
使用 ss 命令(netstat 的现代替代)
ss -tuln | grep <端口号>
- 优势:执行速度更快,语法更简洁。
- 示例
检查22端口:ss -tuln | grep :22
- 输出示例
tcp LISTEN 0 128 *:22 *:*表示SSH端口已开放。
适用场景:高效检查本地端口(推荐优先使用)。
使用 nmap 工具(远程扫描利器)
nmap -p <端口号> <目标IP或域名>
- 安装方法(如未安装):
sudo apt install nmap # Debian/Ubuntu sudo yum install nmap # CentOS/RHEL
- 示例
扫描远程主机的443端口:nmap -p 443 example.com
- 输出解读
443/tcp open https表示端口开放;
443/tcp filtered表示被防火墙拦截。
适用场景:检测远程主机或防火墙策略(支持批量端口扫描)。
使用 telnet 或 nc(测试端口连通性)
Telnet 基础测试
telnet <目标IP> <端口号>
- 成功连接:显示
Connected to <IP>或黑屏光标(如HTTP端口)。 - 失败提示:
Connection refused(服务未运行)或超时(被防火墙拦截)。
Netcat(nc)高级测试
nc -zv <目标IP> <端口号>
- 参数解析
-z:扫描模式(不发送数据)
-v:显示详细输出 - 示例
nc -zv 192.168.1.100 3306
- 成功输出:
Connection to 192.168.1.100 3306 port [tcp/mysql] succeeded!
适用场景:验证端口实际通信能力(
telnet需安装,nc更灵活)。
使用 lsof 命令(查看进程占用)
sudo lsof -i :<端口号>
- 示例
检查谁占用了8080端口:sudo lsof -i :8080
- 输出解读
返回进程名、PID及用户(如nginx进程监听8080)。
适用场景:定位端口占用进程及排查冲突。
防火墙检查(关键安全层)
若端口未开放,可能是防火墙拦截:
# Ubuntu/Debian (ufw) sudo ufw status | grep <端口号> # CentOS/RHEL (firewalld) sudo firewall-cmd --list-ports | grep <端口号>
- 解决方案:开放端口(示例):
sudo ufw allow 80/tcp # Ubuntu sudo firewall-cmd --add-port=80/tcp --permanent # CentOS
总结与最佳实践
| 场景 | 推荐工具 |
|---|---|
| 检查本地监听端口 | ss > netstat |
| 远程端口扫描 | nmap |
| 测试端口通信 | nc 或 telnet |
| 排查端口占用进程 | lsof |
安全建议:

- 仅开放必要端口,关闭无用服务。
- 使用
fail2ban防御暴力破解。 - 定期审计端口:
nmap -sV -O <IP>检测服务版本。
引用说明:
netstat/ss命令参考:Linuxman手册(man netstat/man ss)nmap官方文档:nmap.org- Linux 防火墙指南:Ubuntu UFW、Red Hat Firewalld


