首页/网络/网络排障速查/ss 过滤表达式完整语法

ss 过滤表达式完整语法

把大海捞针变成一句查询:ss 的 filter 支持 sport/dport/src/dst/state,配合 and/or/not 与比较运算符组合,整段表达式必须用引号包住。

网络排障速查网络更新于 2026-10-13

ss 过滤表达式怎么用

ss 的过滤表达式由内核在 netlink 层面完成筛选,比把全部结果管道给 grep 更准确也更快。表达式按「字段 运算符 值」组成,端口可以写数字也可以写服务名,多个条件用 and、or、not 组合并可加括号控制优先级。整段表达式必须用引号包住交给 ss 自己解析,否则括号和空格会被 shell 先拆开。连接数上万的机器上,表达式几乎是唯一可行的手工排查方式。

基本信息

适用平台Linux iproute2 的 ss(所有主流发行版)
方向约定sport 是本机端口、dport 是对端端口,src 是本机地址、dst 是对端地址
必须加引号整段表达式加单引号,避免 shell 解析括号
与状态混用state 过滤器与表达式可同时使用,写在表达式前更清晰
性能特征过滤在内核完成,结果集小时开销远低于全量输出后 grep

典型使用场景

  • 确认某个端口被谁连着:按 dport 或 sport 精确筛出相关套接字
  • 定位谁在占用高端口范围:用区间比较筛出一段临时端口
  • 排查某个状态异常的连接:把状态过滤与端口条件组合使用
  • 排除法缩小范围:用 not 排掉已知正常的端口
  • 批量统计前先收窄:先按条件取出目标集合,再做计数与排序

常用表达式

常用表达式
ss -tan 'sport = :80'
ss -tan '( sport = :80 or sport = :443 )'
ss -tan 'src 10.0.0.9 and dport = :3306'
ss -tan 'dport >= :1024 and dport <= :2000'
ss -tan state established '( dport = :22 or sport = :22 )'
ss -tan 'not ( dport = :22 )'
ss -tanp 'dst 203.0.113.10 and dport = :443'   # 带进程与对端地址
ss -tan 'sport = :80' | wc -l                  # 先收窄再统计连接数

关键字与运算符

关键字含义正常用法示例
sport / dport本地端口 / 对端端口dport = :443 表示本机连出去的对端端口
src / dst本地地址 / 对端地址dst 203.0.113.10 筛对端地址
stateTCP 状态过滤state time-wait 只看回收态
比较运算符等于、不等于、区间比较dport >= :1024 匹配高端口
逻辑组合and、or、not 与括号not 用于排除法
表达式过滤在内核侧完成,比管道接 grep 更准确也更快;连接量大的机器(数万条)应优先用表达式,而不是把全量结果丢给文本工具。
端口既可用数字也可用服务名,但服务名依赖本机 services 数据库,跨机器脚本里统一写数字更可靠。

易错点

  • 表达式不加引号:括号与空格被 shell 吞掉,命令直接报语法错误或语法歧义
  • dport 与 sport 方向写反,结论完全相反;先想清楚是本机监听还是本机外连
  • 忘记加 -a:默认只显示已建立连接,排除法会漏掉监听与回收态连接
  • 端口写服务名导致跨机器结果不一致:不同系统 services 映射可能不同

数据来源与参考

  • man 8 ss(iproute2):FILTER EXPRESSIONS 章节

相关工具

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