欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

良许 | 网络检测神器 ss 命令,你可能根本就不会用!

程序员文章站 2022-06-20 13:21:22
今天我们来介绍一下 Linux 命令。 是 Socket Statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强大的统计功能,能够显示更多更详细的连接信息。 刚开始接触 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」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

良许 | 网络检测神器 ss 命令,你可能根本就不会用!