首页/安全/应急响应速查/按进程统计连接数(找扫描与爆破源)

按进程统计连接数(找扫描与爆破源)

哪个进程连接数异常高,往往就是扫描器、爆破脚本或代理转发:把 ss -p 输出里的 pid 字段聚合排名即可锁定。

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

为什么要按进程统计连接

ss -antp 的 users 字段会带上归属进程,形如 users:(("nginx",pid=1234,fd=6))。把它提取出来按 PID 计数、排名,连接数明显突出的那个进程往往就是扫描器、爆破脚本或代理转发。相比一条条看连接,按进程聚合能一眼看出谁是连接热点,再顺着 PID 去看可执行文件和父进程。

基本信息

适用平台Linux(iproute2 提供的 ss)
权限要求sudo/root,否则看不到其他用户的 pid
解析要点从 users:(("name",pid=N,fd=M)) 中提取 pid= 值
计数口径grep -o 对同一 socket 的多个引用分别计数
对比基准与该服务正常连接数基线比对
后续动作ps 看 cmdline、ppid、启动时间与 exe 真实路径

典型使用场景

  • 外连数量异常、出口带宽飙升时快速定位责任进程
  • 怀疑主机被当作跳板做端口扫描,找发起大量连接的进程
  • SSH 爆破期间确认 sshd 连接来源是否集中、是否属于同一账号
  • 容量巡检时识别连接数长期偏高、可能存在泄漏的进程
  • 与 netstat、ss 原始输出交叉,避免只看聚合数字造成误判

按 PID 聚合连接

按 PID 聚合连接
sudo ss -antp | grep -oE 'pid=[0-9]+' | sort | uniq -c | sort -rn | head -n 20  # 按 PID 计数排名
ss -antp state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head  # 对端 IP 聚合
ps -p 1234 -o pid,ppid,user,lstart,etimes,cmd   # 看热点进程的身份与启动时间
ls -l /proc/1234/exe; tr '\0' ' ' < /proc/1234/cmdline; echo  # 核实真实可执行文件
ss -antp '( dport = :22 )' | head               # 只看目标端口为 22 的连接

ss 输出逐列读法

列/字段含义正常与异常
StateTCP 连接状态大量 SYN-SENT 与大量 ESTAB 指向完全不同的原因
Recv-Q/Send-Q接收与发送队列积压持续非 0 说明对端处理不过来或链路拥塞
Local Address:Port本地地址与端口出现非业务监听端口需要解释来源
Peer Address:Port对端地址与端口集中在少数境外 IP 或固定扫描端口可疑
users:(...)归属进程与 pid聚合排名最高者优先核查
同一 socket 可能被多个进程引用(fork 后共享 fd),grep -o 会逐条计数,这恰好符合「谁在忙」的直觉,但不等于按 socket 去重的严谨统计。
高连接数不等于攻击:Nginx、Java 应用、数据库连接池在正常业务下连接数本身就很高。先建立业务基线,再决定是否处置。

易错点

  • 没加 sudo:ss 不显示其他用户的 pid,聚合结果为空或严重偏少,得出错误结论
  • 把高连接数直接当攻击:正常服务被误判,误杀进程直接造成业务中断
  • 只看计数不看状态:大量 SYN-SENT 是连接不通,大量 ESTAB 才是持续通信,处置方向完全不同
  • 定位到 PID 就杀:应先看 cmdline、exe 与父进程,确认是恶意程序还是业务进程

数据来源与参考

  • man 8 ss(iproute2)
  • SANS 网络排查实践

相关工具

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