首页/网络/抓包与流量分析速查/ss 与抓包联动定位进程
抓包工具链61 条

ss 与抓包联动定位进程

抓包定位到端口后,用 ss 反查归属进程与 socket:ss -tnp 显示连接与进程,快速把包与程序对应起来。

从端口找到进程

抓包定位到端口之后,下一步就是把端口映射到进程。ss 是 Linux 上查看 socket 与进程归属的常用工具:带 -p 能显示占用连接的进程,配合状态过滤可以只看已建立的连接,几步就能把抓到的包和具体程序对应起来,这是排查异常连接时的标准动作。

基本信息

适用平台Linux,属于 iproute2 工具包,多数发行版预装
常用组合ss -tnp、ss -lnp
权限要求-p 需要足够权限才显示进程信息
状态过滤支持 established、time-wait 等状态

典型使用场景

  • 抓包发现异常连接后,找出是哪个进程在收发
  • 排查端口被谁占用
  • 确认监听端口与服务实例是否一一对应
  • 统计各状态连接数量,判断是否有连接堆积
  • 与服务重启时间对照,确认连接归属变化

常用命令

常用命令
ss -tnp state established '( sport = :8080 )'
# 只看源端口 8080 的已建立连接,含进程信息
ss -lnp | grep 8080
# 查看监听 8080 的进程,确认是哪个服务实例
ss -s
# 各状态连接数量汇总,用来判断是否存在连接堆积或端口压力

字段逐项读法

字段含义注意
State连接状态已建立与 TIME_WAIT 要分开看待
Recv-Q / Send-Q收发队列长度持续非零说明应用处理不过来
Local / Peer本端与对端地址端口与本端抓包结果对照
Process进程名与 PID需要权限才显示
容器场景下宿主机的 ss 看不到容器内的进程,需要进入容器的网络命名空间或使用容器内的工具查看。对照时注意 PID 命名空间不同,宿主与容器里的 PID 不是同一个编号。
TIME_WAIT 这类已经没有进程关联的连接查不到进程属于正常现象,不要据此怀疑工具或权限。同名进程存在多实例时,要用 PID 与启动参数区分,只看进程名很容易认错对象。

排查顺序

  • 从抓包里确定可疑的地址与端口组合
  • 用 ss 按端口过滤,找出对应的连接与进程
  • 确认进程的启动时间与抓包时间线是否吻合
  • 队列持续非零时进一步查看应用日志与资源占用
  • 容器环境切换到对应命名空间再复核一次

易错点

  • 期望 TIME_WAIT 连接也能查到进程:该状态已无关联进程,属正常现象
  • 只看进程名不看 PID:同名多实例时会认错对象
  • 在宿主机上找容器内进程:PID 与网络命名空间不同,必须切换视角
  • 忽略队列字段:Recv-Q 持续非零说明应用侧处理不过来,容易被误判成网络问题

数据来源与参考

  • man 8 ss
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌