良许 | 网络检测神器 ss 命令,你可能根本就不会用!
今天我们来介绍一下 linux ss
命令。
ss
是 socket statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强大的统计功能,能够显示更多更详细的连接信息。
刚开始接触 ss 命令可能会比较困难,我们可通过 ss -h
或者 ss -help
来详细学习 ss 的选项功能。当然,最好的办法是直接尝试一些常用的命令来学习 ss 。
下面我们来了解一下 ss 的一些实用用法。
ss -s
是一个非常有用的命令。它可以按网络传输类型显示总体统计信息,我们不妨来测试一下:
$ ss -s total: 524 tcp: 8 (estab 1, closed 0, orphaned 0, timewait 0) transport total ip ipv6 raw 2 1 1 udp 7 5 2 tcp 8 6 2 inet 17 12 5 frag 0 0 0
- raw socket 原始套接字。允许直接发送和接收 ip 数据包,无需满足特定的传输协议,用于 namp 等安全应用。
- tcp 传输控制协议。是我们网络连接当中的主要连接协议。
- udp 用户数据报协议。类似于 tcp 但没有错误检查。
- inet 包含上述项。( inet4 和 inet6 可以通过一些 ss 命令单独查看)。
- frag 可以理解为碎片的意思。
显然,上面的输出结果并没有直接显示详细的 socket 连接情况,我们可以看到最上面的 total
行显示的 socket 总数是非常多的,不过,这种分类统计的方式在某些情况下很有用。
如果想要查看具体的 socket 活动信息,我们可以使用 ss -a
命令,但是我们要做好心理准备查看一大堆的信息,我们可以先用 wc -l
来统计一下行数试探一波:
$ ss -a | wc -l 555
有木有被吓到?555 行数据!
不过不必惊慌,我们可以查看指定类别的 socket 活动。
-
ss -ta
转储所有 tcp socket -
ss -ua
转储所有 udp socket -
ss -wa
转储所有 raw socket -
ss -xa
转储所有 unix socket -
ss -4a
转储所有 ipv4 socket -
ss -6a
转储所有 ipv6 socket
不带参数的 ss 命令会显示所有已经建立的 socket 连接。为了方便阅读,这里只显示一页的信息,省略其他大部分信息:
$ ss | more netid state recv-q send-q local address:port peer address:port u_str estab 0 0 * 20863 * 20864 u_str estab 0 0 * 32232 * 33018 u_str estab 0 0 * 33147 * 3257544ddddy u_str estab 0 0 /run/user/121/bus 32796 * 32795 u_str estab 0 0 /run/user/121/bus 32574 * 32573 u_str estab 0 0 * 32782 * 32783 u_str estab 0 0 /run/systemd/journal/stdout 19091 * 18113 u_str estab 0 0 * 769568 * 768429 u_str estab 0 0 * 32560 * 32561 u_str estab 0 0 @/tmp/dbus-8xbbdjne 33155 * 33154 u_str estab 0 0 /run/systemd/journal/stdout 32783 * 32782 … tcp estab 0 64 192.168.0.16:ssh 192.168.0.6:25944 tcp estab 0 0 192.168.0.16:ssh 192.168.0.6:5385
要查看刚建立的 tcp 连接,使用 ss -t
:
$ ss -t state recv-q send-q local address:port peer address:port estab 0 64 192.168.0.16:ssh 192.168.0.6:25944 estab 0 0 192.168.0.16:ssh 192.168.0.9:5385
要仅显示监听 socket ,尝试 ss -lt
:
$ ss -lt state recv-q send-q local address:port peer address:port listen 0 10 127.0.0.1:submission 0.0.0.0:* listen 0 128 127.0.0.53%lo:domain 0.0.0.0:* listen 0 128 0.0.0.0:ssh 0.0.0.0:* listen 0 5 127.0.0.1:ipp 0.0.0.0:* listen 0 10 127.0.0.1:smtp 0.0.0.0:* listen 0 128 [::]:ssh [::]:* listen 0 5 [::1]:ipp [::]:*
若你想要显示端口号而不是服务名,则 ss -ltn
:
$ ss -ltn state recv-q send-q local address:port peer address:port listen 0 10 127.0.0.1:587 0.0.0.0:* listen 0 128 127.0.0.53%lo:53 0.0.0.0:* listen 0 128 0.0.0.0:22 0.0.0.0:* listen 0 5 127.0.0.1:631 0.0.0.0:* listen 0 10 127.0.0.1:25 0.0.0.0:* listen 0 128 [::]:22 [::]:* listen 0 5 [::1]:631 [::]:*
这里就先介绍这么多,其他的详细内容请参考帮助手册( ss -h
)。
另外,这里提供一些小技巧,你可以将那些最有用的选项转换为别名,能让你更容易使用。例如:
$ alias listen="ss -lt" $ alias socksum="ss -s"
-----------------
我是良许,世界500强外企 linux 开发工程师,专业生产 linux 干货。欢迎关注我的公众号「良许linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。
上一篇: 解析PHP处理换行符的问题
下一篇: 煎黄花鱼的做法有哪些呢