SS常用命令及其解释
-t/-u:区分 TCP/UDP
-l:只看监听
-n:数字化(IP/端口)(即ssh/22;http/80)
-p:显示进程
一张图先搞清「谁是本地、谁是远端」
-
“本地 / local / source” = 正在运行
ss
的这台主机。 -
“远端 / remote / destination” = 和它通信的另一台主机。
-
“本地端口 (sport)” + “本地地址 (src)” 与 “远端端口 (dport)” + “远端地址 (dst)” 一起构成网络五元组
(src IP, src port, dst IP, dst port, 协议),内核用它区分每条连接。
1.什么叫 本地端口 (sport)?
-
只要你的这台主机打开了 socket(无论是发起连接还是被连),它都会占用一个 本地端口号。
-
若本机是 服务器:本地端口通常是固定(80、443、3306 …)。
-
若本机是 客户端:内核会临时分配 高位端口(49152–65535),称为 ephemeral port。
示例:你用 mysql -h 10.0.0.8
连接数据库 →
# 在客户端执行 ss -tan dst 10.0.0.8 dport = :3306 ESTAB 0 0 192.168.1.5:51540 10.0.0.8:3306 # ↑src↑sport ↑ dst ↑dport
-
本地端口 sport = 51540(随机),远端端口 dport = 3306。
2. 什么叫 远端端口 (dport)?
-
与你的 socket 对接的 对方机器端口。
-
对方若是服务器,dport 通常是众所周知的端口(80、443、3306)。
-
当你的主机充当服务器时,对方 就是客户端,dport 会是对方的随机端口。
3. 本地地址 (src) & 远端地址 (dst)
-
src:本机哪个 IP 发起/接收这条流量(在多网卡/多 IP 机器尤为重要)。
-
dst:对方机器的 IP。
过滤示例:
# 只看本机 eth1 的地址发出的所有连接 ss -tan 'src 192.168.1.5' # 只看访问 10.0.0.0/24 网段的连接 ss -tan 'dst 10.0.0.0/24'
4. 对照两个视角,就能明白「本地/远端」是相对概念
机器 | 看到的字段 | 输出示例 |
---|---|---|
客户端 (192.168.1.5) | src 192.168.1.5 : 51540 dst 10.0.0.8 : 3306 | ESTAB 192.168.1.5:51540 10.0.0.8:3306 |
服务器 (10.0.0.8) | src 10.0.0.8 : 3306 dst 192.168.1.5 : 51540 | ESTAB 10.0.0.8:3306 192.168.1.5:51540 |
在两台主机各自执行
ss
,你会发现 src/dst 和 sport/dport 正好互换——谁执行命令谁就是 “source”。
想过滤的条件 | ss 关键字 | 示例 |
---|---|---|
本机端口 | sport | ss -ltn 'sport = :3306' # 谁在监听 3306 |
远端端口 | dport | ss -tan 'dport = :443' # 正在访问外部 443 |
本机 IP | src | ss -tan 'src 192.168.1.5' |
远端 IP | dst | ss -tan 'dst 10.0.0.0/24' |
进程 | -p 选项 | `sudo ss -ltnp |
典型场景对照:
-
已知端口 → 找进程
sudo ss -ltnp 'sport = :8080' # 查看监听 8080 的进程
-
已知进程 PID → 看它占哪些端口
sudo ss -pln | grep 2419 # 2419 是进程号 # 或 sudo lsof -Pan -p 2419 -i
-
已知远端地址+端口 → 看是哪条连接、哪个进程
sudo ss -tanp 'dst 203.0.113.8 dport = :1521'
记忆口诀
-
端口 →
sport / dport
-
地址 →
src / dst
-
进程 →
-p
(不是src/dst
)
这样就能根据“我知道什么”选择正确的 ss
过滤键,快速定位端口‑进程‑地址三者的对应关系。