August 30, 2020

21 пример команды ss

Команда Socket Statistics (ss) аналогична команде netstat, она также используется для отображения полезной информации о сетевых сокетах.

В течение некоторого времени на странице руководства netstat было примечание: «Эта программа устарела. Замена для netstat — это ss

К счастью, многие параметры похожи на те, которые использует netstat, однако, как мы увидим, есть несколько отличий.

Команда ss является частью пакета iproute в CentOS 7 Linux и устанавливается по умолчанию.

Вообще говоря, сетевой сокет определяется IP-адресом, транспортным протоколом и портом. Эта комбинация составляет одну сторону двустороннего соединения. Например, веб-сервер может прослушивать входящие TCP-соединения 1.1.1.1:80, это сокет. Важно отметить, что сокет — это не само соединение, а одна из конечных точек соединения.

Синтаксис команды ss, который мы будем использовать здесь, показан ниже, по сути, мы можем указать дополнительные флаги и фильтры, как мы сейчас обсудим.

1. Перечисление установленных соединений

По умолчанию, если мы запустим команду ss без указания дополнительных параметров, она отобразит список сокетов, которые установили соединения, например, TCP, UDP или UNIX сокеты.

[root@centos7 ~]# ss | head -n 5
Netid  State      Recv-Q Send-Q Local Address:Port      Peer Address:Port
u_str  ESTAB      0      0       * 23740                * 23739
u_str  ESTAB      0      0       * 23707                * 23706
u_str  ESTAB      0      0       * 87021                * 88383
u_str  ESTAB      0      0       * 17056                * 17112

В приведенном выше примере я ограничил вывод.

2. Просмотр всех сокетов в состоянии LISTEN

Вместо того, чтобы перечислять все сокеты, мы можем использовать опцию -l, чтобы отображать только сокеты в состоянии LISTEN

[root@centos7 ~]# ss -lt
State       Recv-Q Send-Q  Local Address:Port                Peer Address:Port
LISTEN      0      2                   *:kerberos-adm        *:*
LISTEN      0      128                 *:sunrpc              *:*
LISTEN      0      5                   *:kpasswd             *:*
LISTEN      0      10       192.168.1.14:domain              *:*
LISTEN      0      10          127.0.0.1:domain              *:*
LISTEN      0      5       192.168.122.1:domain              *:*
LISTEN      0      128                 *:ssh                 *:*

В этом примере мы также использовали опцию -t только для вывода списка TCP, подробнее об этом позже. В следующих примерах вы увидите, что мы будем комбинировать несколько таких вариантов, чтобы быстро отфильтровать то, что нам нужно.

3. Перечисление процессов

Мы можем вывести процесс или PID номер, которому принадлежит сокет, с опцией -p.

[root@centos7 ~]# ss -pl
Netid  State      Recv-Q Send-Q Local Address:Port     Peer Address:Port
tcp    LISTEN     0      128    :::http                :::*                 users:(("httpd",pid=10522,fd=4),("httpd",pid=10521,fd=4),("httpd",pid=10520,fd=4),("httpd",pid=10519,fd=4),("httpd",pid=10518,fd=4),("httpd",pid=10516,fd=4))

В вышеприведенном примере я показал только один результат, без каких-либо дополнительных параметров при полном выводе команды ss выводится более 500 строк в стандартный вывод. В любом случае, мы можем видеть идентификаторы различных процессов Apache, работающих на этом сервере.

4. Отключить вывод названия служб

По умолчанию ss выводит название службы вместо локального порта, как мы видели ранее.

[root@centos7 ~]# ss
Netid  State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
tcp    ESTAB      0      64     192.168.1.14:ssh      192.168.1.191:57091

Однако если мы укажем опцию -n, то вместо названия сервиса мы увидим номер порта.

[root@centos7 ~]# ss -n
Netid  State      Recv-Q Send-Q Local Address:Port    Peer Address:Port
tcp    ESTAB      0      0      192.168.1.14:22       192.168.1.191:57091

Обратите внимание, что теперь отображается :22, а не :ssh, так как мы отключили все разрешения на вывод имен хостов и портов. Вы можете проверить файл /etc/services, чтобы увидеть полный список того, какие порты соответствуют каким службам.

5. Разрешить числовой адрес/порт

Мы также можем сделать обратное и разрешить как IP-адрес, так и номер порта с помощью опции -r. Теперь мы видим имя хоста сервера 192.168.1.14

[root@centos7 ~]# ss -r
Netid  State      Recv-Q Send-Q Local Address:Port         Peer Address:Port
tcp    ESTAB      0      64     centos7.example.com:ssh    192.168.1.191:57091

6. IPv4 сокеты

Мы можем использовать опцию -4 только для отображения информации, соответствующей сокетам IPv4. В приведенном ниже примере мы также используем опцию -l для вывода списка всех прослушиваний по IPv4 адресу.

[root@centos7 ~]# ss -ul
State       Recv-Q Send-Q  Local Address:Port       Peer Address:Port
UNCONN      0      0                   *:mdns       *:*
UNCONN      0      0                   *:kpasswd    *:*
UNCONN      0      0                   *:839        *:*
UNCONN      0      0                   *:36812      *:*
UNCONN      0      0       192.168.122.1:domain     *:*
UNCONN      0      0        192.168.1.14:domain     *:*

7. IPv6 сокеты

Аналогично, мы можем использовать опцию -6 только для отображения информации, связанной с сокетами IPv6. В приведенном ниже примере мы также используем опцию -l для вывода списка всех прослушиваний по IPv6-адресу.

[root@centos7 ~]# ss -l6
Netid  State      Recv-Q Send-Q     Local Address:Port          Peer Address:Port
udp    UNCONN     0      0                     :::ipv6-icmp     :::*
udp    UNCONN     0      0                     :::22834         :::*
udp    UNCONN     0      0                    ::1:323           :::*
tcp    LISTEN     0      128                   :::sunrpc        :::*
tcp    LISTEN     0      128                   :::http          :::*
tcp    LISTEN     0      128                   :::ssh           :::*
tcp    LISTEN     0      128                  ::1:ipp           :::*
tcp    LISTEN     0      100                  ::1:smtp          :::*

8. Только TCP

Опция -t может использоваться для отображения только сокетов TCP. В сочетании с -l команда покажет только сокеты в состоянии LISTEN.

[root@centos7 ~]# ss -lt
State      Recv-Q Send-Q      Local Address:Port       Peer Address:Port
LISTEN     0      128                     *:sunrpc     *:*
LISTEN     0      5           192.168.122.1:domain     *:*
LISTEN     0      128                     *:ssh        *:*
LISTEN     0      128             127.0.0.1:ipp        *:*
LISTEN     0      100             127.0.0.1:smtp       *:*
LISTEN     0      128                    :::sunrpc    :::*
LISTEN     0      128                    :::http      :::*
LISTEN     0      128                    :::ssh       :::*
LISTEN     0      128                   ::1:ipp       :::*
LISTEN     0      100                   ::1:smtp      :::*

9. Только UDP

Опция -u может использоваться для отображения только сокетов UDP. Поскольку UDP — это протокол без установления соединения, простой запуск только с параметром -u ничего не покажет. Вместо этого мы можем комбинировать это с опцией -a или -l, чтобы увидеть все прослушивающие сокеты UDP, как показано ниже.

[root@centos7 ~]# ss -u
Recv-Q Send-Q       Local Address:Port           Peer Address:Port
0      0             192.168.1.14:56658          129.250.35.251:ntp

[root@centos7 ~]# ss -ua
State       Recv-Q Send-Q  Local Address:Port           Peer Address:Port
UNCONN      0      0                   *:mdns           *:*
UNCONN      0      0           127.0.0.1:323            *:*
ESTAB       0      0        192.168.1.14:56658          129.250.35.251:ntp
UNCONN      0      0                   *:21014          *:*
UNCONN      0      0                   *:60009          *:*
UNCONN      0      0       192.168.122.1:domain         *:*
UNCONN      0      0            *%virbr0:bootps         *:*
UNCONN      0      0                   *:bootpc         *:*
UNCONN      0      0                 ::1:323           :::*
UNCONN      0      0                  :::43209         :::*

10. UNIX сокеты

Опция -x может использоваться для отображения только доменных сокетов unix.

[root@centos7 ~]# ss -x
Netid  State      Recv-Q Send-Q Local Address:Port           Peer Address:Port
u_str  ESTAB      0      0      @/tmp/.X11-unix/X0 27818     * 27817
u_str  ESTAB      0      0      @/tmp/.X11-unix/X0 26656     * 26655
u_str  ESTAB      0      0       * 28344                     * 26607
u_str  ESTAB      0      0       * 24704                     * 24705
u_str  ESTAB      0      0      @/tmp/.X11-unix/X0 25195     * 24086
u_str  ESTAB      0      0      @/tmp/dbus-CRqRiw6V 28388    * 28693

11. Вывод всей информации

Опция -a показывает все сокеты, в состоянии LISTEN и в других. В случае TCP это означает установленные соединения. Эта опция полезна для объединения с другими, например, чтобы показать все сокеты UDP, так как по умолчанию только с опцией -u мы не увидим столько информации.

[root@centos7 ~]# ss -u
Recv-Q Send-Q       Local Address:Port           Peer Address:Port
0      0             192.168.1.14:56658          129.250.35.251:ntp

[root@centos7 ~]# ss -ua
State       Recv-Q Send-Q  Local Address:Port           Peer Address:Port
UNCONN      0      0                   *:mdns           *:*
UNCONN      0      0           127.0.0.1:323            *:*
ESTAB       0      0        192.168.1.14:56658          129.250.35.251:ntp
UNCONN      0      0                   *:21014          *:*
UNCONN      0      0                   *:60009          *:*
UNCONN      0      0       192.168.122.1:domain         *:*
UNCONN      0      0            *%virbr0:bootps         *:*
UNCONN      0      0                   *:bootpc         *:*
UNCONN      0      0                 ::1:323           :::*
UNCONN      0      0                  :::43209         :::*

12. Показать использование памяти сокетом

Опция -m может использоваться для отображения объема памяти, используемого каждым сокетом.

[root@centos7 ~]# ss -ltm
State      Recv-Q Send-Q                Local Address:Port       Peer Address:Port
LISTEN     0      128                               *:sunrpc     *:*
  skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN     0      5                     192.168.122.1:domain     *:*
  skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN     0      128                               *:ssh        *:*
  skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN     0      128                       127.0.0.1:ipp        *:*
  skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN     0      100                       127.0.0.1:smtp       *:*
  skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)

13. Показать внутреннюю информацию TCP

Мы можем запросить дополнительную внутреннюю информацию TCP с опцией -i.

[root@centos7 ~]# ss -lti
State      Recv-Q Send-Q                Local Address:Port                        Peer Address:Port
LISTEN     0      128                               *:sunrpc                                    *:*
  cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN     0      5                     192.168.122.1:domain                                    *:*
  cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN     0      128                               *:ssh                                       *:*
  cubic rto:1000 mss:536 cwnd:10 segs_in:2 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN     0      128                       127.0.0.1:ipp                                       *:*
  cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN     0      100                       127.0.0.1:smtp                                      *:*
  cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620

14. Просмотр сводки

Мы можем увидеть краткий обзор статистики с опцией -s.

[root@centos7 ~]# ss -s
Total: 1253 (kernel 1721)
TCP:   13 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*   1721      -         -
RAW     1         0         1
UDP     9         7         2
TCP     11        6         5
INET    21        13        8
FRAG    0         0         0

Это быстро позволяет нам видеть такие вещи, как общее количество установленных соединений, а также подсчет каждого типа сокетов и используется IPv4 или IPv6.

15. Фильтр на основе состояния

Мы можем указать состояние сокета, чтобы выводить сокеты только в этом состоянии. Например, мы можем указать состояния, включая: established , syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack, listen и close. В приведенном ниже примере показаны все установленные соединения TCP. Чтобы сгенерировать этот вывод, я был подключен к серверу по SSH и просто загрузил веб-страницу из Apache. Затем мы видим, что соединения с Apache быстро меняются на time-wait.

[root@centos7 ~]# ss -t state established
Recv-Q Send-Q               Local Address:Port           Peer Address:Port
0      64                     192.168.1.14:ssh         192.168.1.191:57091
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57373
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57372

[root@centos7 ~]# ss -t state time-wait
Recv-Q Send-Q               Local Address:Port           Peer Address:Port
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57373
0      0              ::ffff:192.168.1.14:http   ::ffff:192.168.1.191:57372

16. Фильтр по порту

Фильтрация также может быть выполнена для вывода списка всех портов, которые меньше (lt), больше (gt), равны (eq), не равны (ne), меньше или равны (le), больше или равны (ge).

Например, команда ниже показывает все прослушивающие порты с номером порта 500 или ниже.

[root@centos7 ~]# ss -ltn sport le 500
State       Recv-Q Send-Q    Local Address:Port      Peer Address:Port
LISTEN      0      128                   *:111       *:*
LISTEN      0      5         192.168.122.1:53        *:*
LISTEN      0      128                   *:22        *:*
LISTEN      0      100           127.0.0.1:25        *:*
LISTEN      0      128                  :::111       :::*
LISTEN      0      128                  :::22        :::*
LISTEN      0      100                 ::1:25        :::*

Для сравнения мы можем выполнить противоположное и просмотреть все порты больше 500 с помощью «gt».

[root@centos7 ~]# ss -ltn sport gt 500
State       Recv-Q Send-Q    Local Address:Port       Peer Address:Port
LISTEN      0      128           127.0.0.1:631        *:*
LISTEN      0      128                 ::1:631        :::*

Мы также можем фильтровать на основе таких элементов, как локальный порт или конечный порт, например, ниже мы ищем сокеты TCP, которые имеют локальный порт (sport) ssh.

[root@centos7 ~]# ss -t '( sport = :ssh )'
State       Recv-Q Send-Q       Local Address:Port         Peer Address:Port
ESTAB       0      64             192.168.1.14:ssh        192.168.1.191:57091

17. Вывод контекста SELinux

Параметры -Z и -z могут использоваться для отображения контекста безопасности сокета SELinux. В приведенном ниже примере мы также используем параметры -t и -l только для вывода списка listen сокетов TCP, а с помощью параметра -Z мы также можем видеть контексты SELinux.

[root@centos7 ~]# ss -tlZ
State      Recv-Q Send-Q     Local Address:Port     Peer Address:Port
LISTEN     0      128                    *:sunrpc     *:*                users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
LISTEN     0      5          192.168.122.1:domain     *:*                users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
LISTEN     0      128                    *:ssh        *:*                users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
LISTEN     0      128            127.0.0.1:ipp        *:*                users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
LISTEN     0      100            127.0.0.1:smtp       *:*                users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))

18. Версия программы

Опция -v может использоваться для отображения конкретной информации о версии для команды ss, в этом случае мы видим версию пакета iproute, которая предоставляет ss.

[root@centos7 ~]# ss -v
ss utility, iproute2-ss130716

19. Вывод вспомогательной документации

Опция -h может использоваться для отображения дополнительной справки по команде ss, ее удобно использовать в качестве краткого справочника, если вам нужно краткое описание опций.

[root@centos7 ~]# ss -h
Usage: ss [ OPTIONS ]
...

20. Показать расширенную информацию

Мы можем использовать опцию -e, которая показывает расширенную детальную информацию в конце строки.

[root@centos7 ~]# ss -lte
State      Recv-Q Send-Q      Local Address:Port         Peer Address:Port
LISTEN     0      128                     *:sunrpc       *:*                 ino:16090 sk:ffff880000100000 <->
LISTEN     0      5           192.168.122.1:domain       *:*                 ino:23750 sk:ffff880073e70f80 <->
LISTEN     0      128                     *:ssh          *:*                 ino:22789 sk:ffff880073e70000 <->
LISTEN     0      128             127.0.0.1:ipp          *:*                 ino:23091 sk:ffff880073e707c0 <->
LISTEN     0      100             127.0.0.1:smtp         *:*                 ino:24659 sk:ffff880000100f80 <->

21. Информация о таймере

Опция -o может использоваться для отображения информации о таймере. Эта информация показывает нам такие вещи, как значение таймера повторной передачи, количество повторных передач и количество отправленных проверок активности.

[root@centos7 ~]# ss -to
State       Recv-Q Send-Q         Local Address:Port             Peer Address:Port
ESTAB       0      64              192.168.1.14:ssh              192.168.1.191:57091      timer:(on,242ms,0)
ESTAB       0      0        ::ffff:192.168.1.14:http      ::ffff:192.168.1.191:57295      timer:(keepalive,120min,0)
ESTAB       0      0        ::ffff:192.168.1.14:http      ::ffff:192.168.1.191:57296      timer:(keepalive,120min,0)