Поиск по сайту:

Как использовать команду ss в Linux


Команда ss — это современная замена классической netstat. Вы можете использовать его в Linux для получения статистики о ваших сетевых подключениях. Вот как работать с этим удобным инструментом.

Команда ss против netstat

Замена устаревшей команды netstatss, предоставляет вам подробную информацию о том, как ваш компьютер взаимодействует с другими компьютерами, сетями и службами.

ss отображает статистику для протокола управления передачей (TCP), протокола пользовательских дейтаграмм (UDP), Unix (межпроцессный) и необработанных сокетов. Необработанные сокеты работают на сетевом уровне OSI, что означает, что заголовки TCP и UDP должны обрабатываться прикладным программным обеспечением, а не транспортным уровнем. Сообщения протокола управляющих сообщений Интернета (ICMP) и утилита ping используют необработанные сокеты.

Использование СС

Вам не нужно устанавливать ss, так как он уже является частью актуального дистрибутива Linux. Однако его вывод может быть очень длинным — у нас были результаты, содержащие более 630 строк. Результаты также очень широки.

По этой причине мы включили текстовые представления полученных результатов, так как они не помещались на скриншоте. Мы обрезали их, чтобы сделать их более управляемыми.

Список сетевых подключений

Использование ss без параметров командной строки выводит список сокетов, которые не прослушиваются. То есть он перечисляет сокеты, которые не находятся в состоянии прослушивания.

Чтобы увидеть это, введите следующее:

ss
Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Столбцы следующие:

  • Netid: тип сокета. В нашем примере у нас есть «u_str», поток Unix, «udp» и «icmp6», сокет IP версии 6 ICMP. Дополнительные описания типов сокетов Linux можно найти на справочных страницах Linux.
  • Состояние: состояние, в котором находится сокет.
  • Recv-Q: количество полученных пакетов.
  • Send-Q: количество отправленных пакетов.
  • Локальный адрес:порт: локальный адрес и порт (или эквивалентные значения для сокетов Unix).
  • Peer Address:Port: удаленный адрес и порт (или эквивалентные значения для сокетов Unix).

Для сокетов UDP столбец «Состояние» обычно пуст. Для сокетов TCP это может быть одно из следующих:

  • ПРОСЛУШИВАТЬ: только на стороне сервера. Сокет ожидает запроса на подключение.
  • SYN-SENT: только на стороне клиента. Этот сокет сделал запрос на подключение и ожидает, будет ли он принят.
  • SYN-RECEIVED: только на стороне сервера. Этот сокет ожидает подтверждения соединения после принятия запроса на соединение.
  • УСТАНОВЛЕНО: сервер и клиенты. Между сервером и клиентом установлено рабочее соединение, позволяющее передавать данные между ними.
  • FIN-WAIT-1: сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета или подтверждения запроса на завершение соединения, который ранее был отправлен из этого сокета.
  • FIN-WAIT-2: сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета.
  • ПОДОЖДИТЕ: сервер и клиент. Этот сокет ожидает запроса на завершение соединения от локального пользователя.
  • ЗАКРЫТИЕ: сервер и клиенты. Этот сокет ожидает подтверждения запроса на завершение соединения от удаленного сокета.
  • ПОСЛЕДНИЙ ПОДТВЕРЖДЕНИЕ: сервер и клиент. Этот сокет ожидает подтверждения запроса на завершение соединения, отправленного на удаленный сокет.
  • TIME-WAIT: сервер и клиенты. Этот сокет отправил подтверждение удаленному сокету, чтобы сообщить ему, что он получил запрос на завершение удаленного сокета. Теперь он ожидает, чтобы убедиться, что подтверждение получено.
  • ЗАКРЫТО: Соединение отсутствует, поэтому сокет закрыт.

Список прослушиваемых сокетов

Чтобы увидеть прослушивающие сокеты, мы добавим параметр -l (прослушивание), например:

ss -l
Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Все эти сокеты не подключены и прослушиваются. «rtnl» означает маршрутизацию netlink, которая используется для передачи информации между процессами ядра и пользовательского пространства.

Список всех сокетов

Чтобы вывести список всех сокетов, вы можете использовать параметр -a (все):

ss -a
Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

Вывод содержит все сокеты, независимо от состояния.

Список сокетов TCP

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

ss -a -t

Список сокетов UDP

Параметр -u (UDP) выполняет фильтрацию того же типа. На этот раз мы увидим только сокеты UDP:

ss -a -u
State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process 
UNCONN 0      0               0.0.0.0:631         0.0.0.0:* 
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:* 
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

Список сокетов Unix

Чтобы увидеть только сокеты Unix, можно включить параметр  -x (Unix), как показано ниже:

ss -a -x
Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Список необработанных сокетов

Фильтром необработанных сокетов является параметр -w (raw):

ss -a -w

Список сокетов IP версии 4

Сокеты, использующие протокол TCP/IP версии 4, могут быть перечислены с помощью параметра -4 (IPV4):

ss -a -4

Список сокетов IP версии 6

Вы можете включить соответствующий фильтр IP версии 6 с помощью параметра -6 (IPV6), например:

ss -a -6

Список сокетов по состоянию

Вы можете перечислить сокеты по состоянию, в котором они находятся, с помощью параметра state. Это работает с установленными, прослушиваемыми или закрытыми состояниями. Мы также будем использовать параметр разрешения (-r), который пытается преобразовать сетевые адреса в имена, а порты — в протоколы.

Следующая команда будет искать установленные соединения TCP, а ss попытается разрешить имена:

ss -t -r state established

Перечислены четыре соединения, которые находятся в установленном состоянии. Имя хоста, ubuntu20-04, было разрешено, и вместо 22 для соединения SSH во второй строке отображается «ssh».

Мы можем повторить это для поиска сокетов в состоянии прослушивания:

ss -t -r state listening
Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

Список сокетов по протоколу

Вы можете перечислить сокеты, используя определенный протокол, с параметрами dport и sport , которые представляют порты назначения и источника соответственно.

Мы вводим следующее, чтобы получить список сокетов, использующих протокол HTTPS для установленного соединения (обратите внимание на пробел после открывающей скобки и перед закрывающей):

ss -a state established '( dport = :https or sport = :https )'

Мы можем использовать имя протокола или порт, обычно связанный с этим протоколом. Порт по умолчанию для Secure Shell (SSH) — порт 22.

Мы будем использовать имя протокола в одной команде, а затем повторим ее, используя номер порта:

ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'

Как и ожидалось, мы получаем те же результаты.

Список подключений к определенному IP-адресу

С опцией dst (назначение) мы можем перечислить подключения к определенному IP-адресу назначения.

Набираем следующее:

ss -a dst 192.168.4.25

Идентификация процессов

Чтобы увидеть, какие процессы используют сокеты, вы можете использовать параметр процессов (-p), как показано ниже (обратите внимание, что вы должны использовать sudo):

sudo ss -t -p
State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Это показывает нам, что два установленных соединения на сокетах TCP используются демоном SSH и Firefox.

Достойный преемник

Команда ss предоставляет ту же информацию, которая ранее предоставлялась netstat, но в более простом и доступном виде. Вы можете проверить справочную страницу для получения дополнительных опций и советов.

RELATED: Best Linux Laptops for Developers and Enthusiasts