1、netstat常用命令
# 查看该端口是否被占用
netstat -lnp|grep 5000
# 查看所有被占用端口
netstat -tunlp
2、ss命令
ss(Socket Statistics)是Linux系统中用于分析网络连接信息的高效工具,作为netstat的现代化替代品,它以更快的执行速度和更详细的连接状态展示著称。本文将从基础语法到实战技巧,全面解析这一网络诊断利器的使用方法。
- 实时显示TCP/UDP/UNIX socket连接状态
- 支持IPv4/IPv6双协议栈分析
- 可关联进程信息与网络连接
2.1、对比netstat优势

标准语法格式:ss [选项] [过滤条件]
|
|
显示TCP连接 |
|
|
显示UDP连接 |
|
|
仅显示监听状态的端口 |
|
|
显示所有连接(含监听/非监听) |
|
|
禁用服务名称解析(显示端口号) |
|
|
显示关联进程信息 |
|
|
输出统计摘要 |
|
|
仅IPv4连接 |
|
|
仅IPv6连接 |
|
|
显示TCP定时器信息 |
2.2、典型应用场景与实例
快速查看活动连接
# ss -tunap
-t:TCP协议
-u:UDP协议
-n:显示数字端口
-a:所有状态
-p:显示进程信息
定位特定服务端口
# 查看SSH服务(22端口)连接情况:
ss -tn src :22
分析TIME-WAIT状态连接
ss -t -o state time-wait
统计网络连接概况
root@jeven01:~# ss -s
Total: 208
TCP: 19 (estab 2, closed 5, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 1 0 1
UDP 2 1 1
TCP 14 10 4
INET 17 11 6
FRAG 0 0 0
2.3、组合条件筛选
查看来自特定IP的连接:
root@jeven01:~# ss dst 192.168.3.105
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 192.168.3.88:ssh 192.168.3.105:58051
tcp ESTAB 0 52 192.168.3.88:ssh 192.168.3.105:58050
端口范围查询:
# 源端口大于1024
ss -t sport gt :1024
2.4、安全分析与故障排查
检测异常连接:
root@jeven01:~# ss -antp | grep -v '127.0.0.1' | column -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:80 0.0.0.0:* users:(("haproxy",pid=940,fd=6))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=875,fd=3))
LISTEN 0 4096 0.0.0.0:8987 0.0.0.0:* users:(("docker-proxy",pid=6499,fd=4))
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=686,fd=14))
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:* users:(("haproxy",pid=940,fd=7))
LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:* users:(("docker-proxy",pid=1721,fd=4))
ESTAB 0 0 192.168.3.88:22 192.168.3.105:58051 users:(("sshd",pid=6070,fd=4))
ESTAB 0 52 192.168.3.88:22 192.168.3.105:58050 users:(("sshd",pid=5959,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=875,fd=4))
LISTEN 0 4096 [::]:8987 [::]:* users:(("docker-proxy",pid=6505,fd=4))
LISTEN 0 128 [::1]:6010 [::]:* users:(("sshd",pid=5959,fd=5))
LISTEN 0 4096 [::]:8000 [::]:* users:(("docker-proxy",pid=1728,fd=4))
分析连接队列溢出:
ss -ltn | grep 'Send-Q'
# Recv-Q:等待应用读取的数据量
# Send-Q:等待发送的数据量
追踪进程网络行为:
ss -ap | grep 'python'
2.5、注意事项
- 权限要求:某些信息(如进程ID和详细连接数据)需要以管理员权限运行
ss,否则可能无法完整显示。 - 区分监听与非监听状态:使用
-l选项仅显示监听中的端口,而默认情况下会显示所有活动连接。 - 避免误用反向DNS解析:默认启用的反向DNS解析可能影响性能,建议使用
-n禁用解析以加快输出速度。 - 过滤条件需精确:过滤条件(如地址、端口)必须准确无误,否则可能导致结果为空或不符合预期。
- TCP与UDP区分:
-t和-u分别用于查看TCP和UDP连接,切勿混淆两者。 - 小心处理大量连接:在高并发系统中,
ss输出可能非常庞大,建议结合grep或其他工具进行筛选。 - 进程信息依赖
/proc文件系统:-p选项显示进程信息时,依赖于/proc文件系统,确保其已挂载。 - 版本差异:不同Linux发行版的
ss版本可能存在功能差异,建议查阅本地手册页确认支持的选项。 - 注意IPv4与IPv6混合输出:默认情况下,
ss可能同时显示IPv4和IPv6连接,使用-4或-6明确指定协议版本。 - 清理输出格式:复杂场景下建议结合
-o(计时器信息)或自定义列格式,以优化输出可读性。