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

Окно терминала в портативной системе Linux.
Фатмавати Ахмад Заенури / Shutterstock

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

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

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

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

Используя сс

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

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

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

С помощью 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

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

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

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

  • СЛУШАТЬ: Только на стороне сервера. Сокет ожидает запроса на подключение.
  • SYN-SENT: Только на стороне клиента. Этот сокет отправил запрос на подключение и ожидает, будет ли он принят.
  • SYN-RECEIVED: Только на стороне сервера. Этот сокет ожидает подтверждения подключения после принятия запроса на подключение.
  • УСТАНОВИЛ: Сервер и клиенты. Между сервером и клиентом установлено рабочее соединение, позволяющее передавать данные между ними.
  • FIN-WAIT-1: Сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета или подтверждения запроса на прекращение соединения, который был ранее отправлен из этого сокета.
  • FIN-WAIT-2: Сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета.
  • CLOSE-WAIT: Сервер и клиент. Этот сокет ожидает запроса на прекращение соединения от локального пользователя.
  • ЗАКРЫТИЕ: Сервер и клиенты. Этот сокет ожидает подтверждения запроса на завершение соединения от удаленного сокета.
  • 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» означает маршрутизацию netlink, которая используется для передачи информации между процессами ядра и пространства пользователя.

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

Чтобы перечислить все сокеты, вы можете использовать -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 (сырой) вариант:

ss -a -w

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

Перечисление IP версии 4 сокетов

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

ss -a -4

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

Перечисление IP версии 5 сокетов

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

ss -a -6

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

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

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

Следующая команда будет искать установленные соединения 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 на established соединение (запишите пробел после открывающей скобки и перед закрывающей):

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.