使用 netstat
命令(经典工具)
netstat
是传统网络工具,适合大多数Linux发行版(需安装 net-tools
包):
# 过滤特定端口(如80端口) sudo netstat -tuln | grep ':80'
参数解析:
-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
使用 ss
命令(推荐替代方案)
ss
(Socket Statistics)是 netstat
的现代替代品,速度更快,语法类似:
# 查看所有TCP/UDP监听端口 sudo ss -tuln # 检查特定进程占用的端口(如Nginx) sudo ss -tuln | grep nginx
优势:
- 直接读取内核数据,效率更高
- 支持更细粒度的过滤(如
ss -t state established
)
使用 lsof
命令(查看进程级占用)
lsof
(List Open Files)可查看进程打开的文件和端口:
# 查看所有网络端口占用 sudo lsof -i -P -n # 检查80端口被哪个进程占用 sudo lsof -i :80
参数说明:
-i
:显示网络连接-P
:禁用端口服务名解析(显示数字端口)-n
:禁用IP地址解析(显示IP而非主机名)
输出关键列:
COMMAND
(进程名)、PID
(进程ID)、TYPE
(类型)、NODE
(协议)、NAME
(地址:端口)
使用 nmap
扫描本地端口(安全审计场景)
nmap
通常用于远程扫描,但也可检查本机开放端口:
# 扫描本机所有TCP端口 sudo nmap -sT -p- 127.0.0.1
参数解释:
-sT
:TCP连接扫描-p-
:扫描1-65535所有端口
适用场景:
验证防火墙规则或隐藏端口,比netstat
/ss
更全面(需root权限)。
其他工具补充
-
fuser
命令:
快速查看端口占用进程(需端口协议):sudo fuser 80/tcp # 显示使用80/TCP的进程PID
-
systemctl
管理服务:
若端口由systemd服务管理,可直接查询:systemctl status sshd | grep -i "listening" # 检查SSH服务端口
常见问题解决
-
权限不足:
普通用户可运行netstat -tuln
或ss -tuln
查看端口状态(但无法显示进程名),需sudo
获取完整信息。 -
工具未安装:
安装命令参考:# netstat (net-tools) sudo apt install net-tools # Debian/Ubuntu sudo yum install net-tools # CentOS/RHEL # ss/lsof (默认预装) sudo apt install lsof nmap # 按需安装
-
查看指定进程的端口:
结合pgrep
和ss
:ss -tuln -p | grep $(pgrep nginx) # 查找Nginx相关端口
总结与最佳实践
- 日常推荐:优先使用
ss
(高效)或lsof
(进程关联性强)。 - 安全建议:
- 定期检查异常端口(如
netstat -antp
查看所有TCP连接)。 - 使用
nmap
进行深度扫描,检测未授权服务。
- 定期检查异常端口(如
- 生产环境:结合自动化脚本(如
ss -tuln > port_scan.log
定期归档)。
引用说明: 基于Linux内核文档(kernel.org)及以下工具手册:
netstat
/ss
:Linux Programmer’s Manuallsof
:Victor A. Abell 官方文档nmap
:Nmap Network Scanning Book (Gordon Lyon)
操作验证环境:Ubuntu 22.04/CentOS 7,兼容主流Linux发行版。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5930.html