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

如何检查Linux端口是否开放

使用 netstat -tulnss -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端口已开放。

适用场景:高效检查本地端口(推荐优先使用)。

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


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

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


使用 telnetnc(测试端口连通性)

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
测试端口通信 nctelnet
排查端口占用进程 lsof

安全建议

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

引用说明

  • netstat/ss 命令参考:Linux man 手册(man netstat/man ss
  • nmap 官方文档:nmap.org
  • Linux 防火墙指南:Ubuntu UFW、Red Hat Firewalld
0