linux怎么查看开了哪些端口

linux怎么查看开了哪些端口
最新回答
快乐若即若离

2021-04-15 06:19:10

在Linux系统中,查看已开放端口的方法如下

1. 使用netstat命令
netstat是经典的端口查看工具,需结合参数实现精准查询:

  • 查看所有监听端口:netstat -anp
    参数说明:-a显示所有连接,-n以数字形式显示地址(不解析域名),-p显示进程信息。
    示例:netstat -anp | grep LISTEN 可筛选出处于监听状态的端口。
  • 按协议类型筛选

    TCP端口:netstat -ntpl

    UDP端口:netstat -nupl
    参数说明:-t仅显示TCP连接,-u仅显示UDP连接,-l仅显示监听中的端口。
    示例:netstat -ntpl | grep 3306 可查找MySQL默认端口3306的监听情况。

2. 使用ss命令(推荐替代netstat)
ss是更高效的替代工具,语法与netstat类似:

  • 查看所有监听端口:ss -anp
  • 按协议筛选

    TCP端口:ss -ntpl

    UDP端口:ss -nupl
    示例:ss -ntpl | grep nginx 可检查Nginx服务的TCP端口占用。

3. 使用lsof命令
通过端口号反向查询关联进程:

  • 格式:lsof -i:$PORT($PORT为具体端口号)
    示例:lsof -i:22 可查看SSH服务(默认端口22)的进程信息。
  • 结合grep过滤:lsof -i | grep LISTEN 可筛选所有监听端口。

4. 通过/etc/services文件查询
该文件记录了端口与服务的默认映射关系:

  • 查看命令:cat /etc/services | grep $PORT
    示例:cat /etc/services | grep 80 可确认80端口是否关联HTTP服务。
    注意:此方法仅显示默认服务,实际占用可能因自定义配置而不同。

5. 使用nmap扫描本地端口(需root权限)
nmap可检测开放端口及服务版本:

  • 命令:sudo nmap -sT -O localhost
    参数说明:-sT执行TCP全连接扫描,-O尝试识别操作系统。
    适用场景:当netstat或ss无法检测到某些端口时(如被防火墙隐藏的端口)。

补充说明

  • 端口与进程关系:端口由进程开启,关闭进程则端口自动释放。
  • 关闭端口方法

    通过iptables禁用:iptables -A INPUT -p tcp --dport $PORT -j DROP

    终止关联进程:kill -9 $PID(PID可通过netstat -anp获取)。

以上方法可根据需求组合使用,推荐优先使用ss或netstat快速定位端口,再通过lsof或nmap进一步分析。