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

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

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

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

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

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

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

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

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

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

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

ss

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

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

  Как добывать криптовалюту Bitcoin Gold (BTG) в Linux с помощью Minergate

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

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

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

Вывод списка прослушивающих сокетов

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

ss -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» означает маршрутную сетевую ссылку, которая используется для передачи информации между ядром и процессами пользовательского пространства.

  Как убить программы из терминала в Linux

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

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

ss -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

 ss -a -t в окне терминала.

Вывод списка сокетов UDP

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

ss -a -u

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

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

ss -a -w в окне терминала.

Вывод списка сокетов IP версии 4

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

ss -a -4

ss -a -4 в окне терминала.

Вывод списка сокетов IP версии 6

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

ss -a -6

ss -a -6 в окне терминала.

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

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

  Как изменить данные пользователя с помощью chfn и usermod в Linux

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

ss -t -r state established

ss -t -r состояние, установленное в окне терминала.

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

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

ss -t -r state listening

ss -t -r состояние прослушивания в окне терминала.

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 )’

ss -a состояние установлено '(dport =: https или sport =: https)' в окне терминала.

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

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

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

ss -a '(dport =: ssh или sport =: ssh)' в окне терминала.

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

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

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

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

ss -a dst 192.168.4.25

ss -a dst 192.168.4.25 в окне терминала.

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

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

sudo ss -t -p

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, но более простым и доступным способом. Вы можете проверить страница руководства для получения дополнительных опций и советов.