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

Linux如何查看监听端口?

在 Linux 中查看监听端口,主要使用 netstat -tuln 或更现代的 ss -tuln 命令, lsof -i 也可查看进程监听的端口信息。

使用 netstat 命令(经典工具)

netstat 是传统网络工具,适合大多数Linux发行版(需安装 net-tools 包):

# 安装net-tools(如未预装)
sudo apt install net-tools     # Debian/Ubuntu
sudo yum install net-tools     # CentOS/RHEL
# 查看所有监听端口(IPv4和IPv6)
netstat -tuln
# 参数说明:
# -t : TCP协议
# -u : UDP协议
# -l : 仅显示监听状态
# -n : 以数字形式显示端口(不解析服务名)
# -p : 显示进程名(需sudo权限)

输出示例

Proto Recv-Q Send-Q Local Address   Foreign Address State       PID/Program name  
tcp        0      0 0.0.0.0:22      0.0.0.0:*       LISTEN      1234/sshd  
tcp6       0      0 :::80           :::*            LISTEN      5678/nginx

使用 ss 命令(推荐,更高效)

ss(Socket Statistics)是 netstat 的现代替代品,性能更强,预装于多数新系统:

# 查看所有TCP/UDP监听端口
ss -tuln
# 高级用法:
ss -tuln sport = :80    # 监听80端口的连接
ss -tuln state listening # 明确过滤监听状态

使用 lsof 命令(查看进程关联)

lsof 列出被进程打开的文件(包括网络套接字):

# 安装lsof(如未预装)
sudo apt install lsof     # Debian/Ubuntu
sudo yum install lsof     # CentOS/RHEL
# 查看所有监听端口
sudo lsof -i -P -n | grep LISTEN
# 参数说明:
# -i : 显示网络连接
# -P : 禁用端口服务名解析(显示数字端口)
# -n : 禁用主机名解析(显示IP)

通过 /proc 文件系统(底层查看)

Linux 内核通过 /proc/net 暴露网络信息:

# 查看TCP监听
cat /proc/net/tcp | awk '{$2=$3=""; print $0}' | grep "0A"  # 0A=LISTEN状态(十六进制)
# 查看UDP监听
cat /proc/net/udp

需转换端口:0016 → 十进制22(SSH端口)。


防火墙工具辅助查看

若防火墙(如 iptablesfirewalld)启用,可能影响实际可访问性:

# 检查防火墙规则
sudo iptables -L -n -v        # iptables
sudo firewall-cmd --list-all  # firewalld(CentOS/RHEL)

使用场景建议

  • 快速检查:优先用 ss -tuln(速度快,无需安装)。
  • 进程关联:用 lsofnetstat -tulnp 定位程序路径。
  • 脚本处理ss/proc 输出更易解析。
  • 兼容旧系统netstat 作为备选。

安全注意事项

  1. 最小化监听:关闭非必要端口(如数据库端口暴露到公网)。
  2. 权限控制:使用 sudo 查看进程时避免泄露敏感信息。
  3. 定期审计:通过 cron 任务定时检查监听端口变化。

引用说明参考 Linux 官方手册(man netstatman ss)、Red Hat 文档及网络管理最佳实践,命令测试于 Ubuntu 22.04 和 CentOS 7 环境。

0