上一篇
如何检查Linux端口是否开放
- Linux
- 2025-06-12
- 2085
使用
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