ss 过滤表达式是什么
ss 支持类似 tcpdump 的过滤表达式,可以按端口、状态、地址条件筛选套接字,并且在内核侧完成:匹配的是字段语义,而不是输出里的文本片段,所以不会出现 grep 误命中的情况,海量连接时开销也更低。
基本信息
| 适用平台 | Linux(iproute2 套件) |
|---|---|
| 命令语法 | ss [选项] '过滤表达式' |
| 常用条件 | sport、dport、src、dst、state 以及括号组合 |
| 书写要点 | 表达式整体加引号,状态名使用连字符 |
典型使用场景
- 定位监听者:直接用源端口条件找出监听某个端口的进程
- 按对端筛选:只看与某个数据库地址之间的连接,排除其他流量
- 组合条件:用或与括号表达双向端口匹配这类复杂条件
- 状态排查:筛出半关闭请求堆积的连接,判断应用是否漏关闭
- 先筛后排:过滤后再交给 grep 排除已知进程,缩小范围
常用示例
常用示例
ss -tlnp 'sport = :443' # 谁在监听 443
ss -tnp dst 10.0.0.9 # 与指定地址之间的 TCP 连接
ss -tnp '( dport = :443 or sport = :443 )' # 443 双向流量
ss -tan state close-wait | head # 揪出卡在 CLOSE-WAIT 的连接
ss -tan state time-wait | wc -l # 统计 TIME-WAIT 数量
ss -tnp sport = :22 | grep -v sshd # 过滤后再排除已知进程常用条件
| 条件 | 含义 | 示例 |
|---|---|---|
| sport 与 dport | 源端口与目标端口 | sport = :443 |
| src 与 dst | 源地址与目标地址 | dst 10.0.0.9 |
| state | 连接状态 | state close-wait |
| and 与 or | 条件组合 | ( dport = :443 or sport = :443 ) |
| 取反 | 排除某类连接 | 写法随版本不同,先小范围验证 |
半关闭一侧堆积说明应用没有正确关闭连接;TIME-WAIT 多为短连接的正常现象,数量异常巨大时再考虑内核参数调优。
表达式里的地址条件也支持整个网段写法,排查某一网段的连接时比反复过滤文本更快也更准。
过滤结果为空不代表服务正常,先去掉过滤条件看全量输出,确认进程确实在监听再下结论。
过滤表达式必须整体加引号,不加会被 shell 拆成多个参数,ss 会报语法错误。
过滤是在内核里完成的,比先输出全部连接再交给 grep 过滤快得多,连接数上万时差别很明显。多个状态可以用括号与 or 组合,写不确定时先不加过滤跑一次全量输出,看清状态名与地址写法后再逐步收窄条件。