在 Linux 上检查开放端口
从本机套接字到全网 nmap 扫描,一步步找出 Linux 机器或网络中开放的端口。
在目标机器上运行 `sudo ss -tulpn`,即可列出所有监听端口及其占用进程。
快速开始
无论是排查无响应的服务、做服务器安全审计,还是单纯想知道有哪些端口在监听,检查开放端口都需要两个层面:本机开了哪些服务,以及网络层面实际能访问到哪些。本指南带你完成这两步,全部使用适合 Linux 终端的命令。
用 ss 查看本机监听的端口
先从本机入手:ss 会列出所有处于监听状态的 TCP/UDP 套接字,并显示占用它们的进程,让你立刻知道哪个服务占了哪个端口。加 sudo 运行,否则进程名可能显示不出来。当每一条 LISTEN 记录都能对应到端口和进程名时,这一步就完成了。
弄清端口背后的进程
如果 ss 显示某个端口被一个陌生的进程占用,先拍一份完整的进程快照,查看它的属主、CPU/内存占用和完整命令行。这样在深入排查之前,你就能判断这个监听是否正常。当每个陌生端口都能对应到一个你了解的进程时,这一步就完成了。
(可选)先找出网络中在线的主机
如果你的目标是检查整个网段而不是某一台已知的机器,先做一次 ping 扫描,列出子网里在线的主机。这样可以避免对离线机器浪费完整的端口扫描。拿到一份待扫描的 IP 清单后,这一步就完成了。
只做存活探测、不扫端口的 ping 扫描——网络排查中被遗忘的第一步。
命令
$ sudo nmap -sn 192.168.1.0/24用 nmap 扫描主机的全部端口
想了解外部视角——即网络中其他机器实际能访问到什么——就对目标主机做一次覆盖全部 65535 个端口的服务版本扫描。这能从另一个角度发现 ss 遗漏的服务,并给出可与已知漏洞对照的版本号。只扫描你有权限管理的机器。得到完整的开放端口和版本列表后,这一步就完成了。
!端口扫描可能被视为攻击行为,只扫描你拥有或获得明确授权的主机和网络。
如何确认已解决
你能在主机上列出所有监听套接字及对应进程,并且从另一台机器用 nmap 扫描得到的开放端口和版本信息一致。
来源
- ss(8) — Arch Manual Pages依据: Same options documented for ss, another utility to investigate sockets.
- ss(8) — Debian bookworm依据: Documents -t/--tcp, -u/--udp, -l/--listening, -p/--processes and -n/--numeric for the socket statistics tool.
- Ubuntu Manpage: ps - report a snapshot of the current processes依据: "ps displays information about a selection of the active processes"; the u option selects the user-oriented format with USER, %CPU, %MEM, and COMMAND headers.
- ps - report a snapshot of the current processes依据: The ps page documents the a, u, and x options ("u Display user-oriented format" including USER, %CPU, %MEM, and COMMAND columns) and describes ps as reporting "a snapshot of the current processes".
- Host Discovery — Nmap Reference Guide依据: Documents -sn (ping scan, no port scan) and default discovery probes per target type.
- nmap(1) — Debian manpage依据: Debian manpage describes nmap's -sV version detection and -p- to scan ports 1-65535
- nmap(1) — Ubuntu manpage依据: Ubuntu manpage documents -sV service/version detection and -p- (all 65535 ports) port specification
最后验证: 2026-09-21