当前位置:首页 > Linux > 正文

如何检查Linux端口是否开放

使用 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端口:

    如何检查Linux端口是否开放 第1张

    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 表示被防火墙拦截。

适用场景:检测远程主机或防火墙策略(支持批量端口扫描)。

如何检查Linux端口是否开放 第2张


使用 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

安全建议

  1. 仅开放必要端口,关闭无用服务。
  2. 使用 fail2ban 防御暴力免费。
  3. 定期审计端口:nmap -sV -O <IP> 检测服务版本。


引用说明

如何检查Linux端口是否开放 第3张

0