首页/安全/应急响应速查/ss 查看连接与监听端口

ss 查看连接与监听端口

iproute2 的新一代连接查看工具:一次列出 TCP/UDP 连接、状态、进程与端口,是外联排查的首选入口。

应急响应速查安全更新于 2026-10-13

ss 是什么

ss 属于 Linux 的 iproute2 套件,通过内核 netlink 的 sock_diag 接口直接读取 socket 信息,而不是解析 /proc/net/tcp 文本,所以在几十万条连接的压力场景下比 netstat 快得多,输出也更精确。历史上大家用 net-tools 的 netstat,但主流发行版已不再默认安装 net-tools,新系统一律推荐 ss。应急排查时它是「谁在跟外界通话」的第一入口:一条命令就能同时看到连接状态、对端地址、进程归属。

基本信息

所属套件iproute2(Linux),精简容器镜像可能未预装需自行补装
语法ss [选项] [过滤表达式]
常用选项-a 全部 -n 不解析名字 -t TCP -u UDP -l 仅监听 -p 显示进程 -s 汇总 -e 详细信息
过滤表达式state established、sport = :22、dport = :443、'( dport = :80 or dport = :443 )'
进程归属-p 需要 root 或 CAP_NET_ADMIN,普通用户只能看到自己拥有的连接
替代工具老系统与 Windows 用 netstat -ano;Linux 新系统统一用 ss

典型使用场景

  • 怀疑主机被控时快速筛出对外建立的可疑连接,锁定回连目标地址
  • 确认某个端口被哪个进程占用,为后续隔离或清理排序
  • 木马清理后复查监听面,确认没有残留后门端口
  • 排查连接数暴涨、TIME-WAIT 堆积、文件描述符耗尽类故障
  • 在宿主机上查看容器进程的对外连接,定位被投毒的容器
  • 与 lsof、tcpdump 结果交叉验证,形成可写进报告的连接证据

高频用法

高频用法
sudo ss -antp                                        # 全部 TCP 连接与监听,含进程
sudo ss -antp state established | grep -vE '127.0.0.1|::1'   # 只看对外已建立连接
sudo ss -antp '( dport = :22 or sport = :22 )'        # 只看 SSH 相关连接
ss -lntup                                            # 监听端口全景,TCP 与 UDP 一起看
ss -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head   # 按对端 IP 统计连接数
ss -s                                                # 汇总统计,判断是否发生连接耗尽
sudo ss -tiep                                        # 带 inode 与计时器信息,便于与取证数据对照

输出逐列读法

列含义异常信号
Netid协议类型:tcp、udp、unix、nl大量 unix socket 属正常,不必逐个追
State连接状态 ESTAB、LISTEN、TIME-WAIT、CLOSE-WAITESTAB 指向陌生公网地址且端口高位随机或非常规
Recv-Q / Send-Q接收与发送队列积压字节数LISTEN 下 Send-Q 是 backlog;ESTAB 长期积压说明对端不回或程序卡死
Local Address:Port本地地址与端口监听在 0.0.0.0 且端口陌生,说明服务暴露到全部网卡
Peer Address:Port对端地址与端口回连特征:对端 IP 固定、端口高位、且多台主机指向同一地址
Processusers:(('进程名',pid=,fd=))进程列空白通常是没加 sudo;进程名与预期身份不符要立刻追
排查时坚持用 -n:解析域名和端口名会拖慢输出,而且解析请求会暴露到 DNS 侧日志里,对隐蔽处置不利。要记证据时把输出重定向到独立介质,例如 ss -antp > /evidence/ss_$(date +%F_%H%M).txt。
不要把 127.0.0.1 的连接一律当成正常:本地代理端口、frp 本地回连、socks5 中转往往是攻击者链路的一环,应当保留环回连接再去核对其归属进程。

交叉验证与容器场景

交叉验证与容器场景
sudo lsof -i -nP | grep -i estab | head           # 用 lsof 交叉核对,能带出进程与用户
cat /proc/net/tcp | head                          # 内核原始表,地址与端口为十六进制
sudo ss -ltnp                                     # 只看监听,确认有没有新增服务端口
sudo nsenter -t <容器内PID> -n ss -antp           # 进入容器的网络命名空间查看其连接
容器里的 ss 只能看到本网络命名空间:查容器内部连接要在宿主机用 nsenter 或 docker exec 进容器执行,两种视角的结果不一样,别混淆。

连接状态含义

状态含义处置提示
LISTEN本机在监听,等待对端连接陌生端口的监听是后门最直接的证据
ESTAB双向连接已建立,正在通信结合对端地址与进程判断是否为回连
SYN-SENT本机已发出握手但未收到回应反复出现说明在对某个不可达地址重试,常见于限速的 C2
TIME-WAIT本机主动关闭连接后的等待态数量巨大说明连接频繁创建,可能是程序未复用连接
CLOSE-WAIT对端已关闭,本机未关闭长期堆积说明程序有连接泄漏,与安全无关但会影响可用性

排查动作顺序

  • 先 ss -lntup 看监听面,确认新增或陌生服务端口
  • 再 ss -antp state established 看对外连接,逐条核对方地址归属
  • 对可疑连接取进程 PID,进 /proc 看 exe 与 cwd 确认真实身份
  • 把对端地址整理成 IOC,横向到其他主机上检索同一地址
  • 按需用 tcpdump 抓该连接的少量报文,确认通信内容与协议特征

易错点

  • 没加 sudo 就用 -p:进程列整片空白,容易被误读成「这些连接没有主」,实际只是权限不足
  • 把环回连接全部过滤掉:本地中转与隧道正好走 127.0.0.1,过滤后反而把关键链路筛没了
  • 只看 ESTABLISHED 不看 LISTEN:遗留的监听后门会被漏掉,复查时应两段都看
  • 照抄 netstat 参数写脚本:新发行版默认不装 net-tools,脚本会直接报命令不存在
  • 只抓一次输出:连接是瞬时的,短连接在单次快照里看不到,取证要间隔采样并落盘

数据来源与参考

  • man 8 ss(iproute2)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌