ss - утилита для отображения информации о сетевых сокетах

  • Михаил
  • 8 мин. на прочтение
  • 168
  • 29 Feb 2024
  • 18 May 2024

ss (сокращение от "socket statistics") - это консольная утилита командной строки в Linux и других Unix-подобных операционных системах, которая используется для отображения информации о сетевых сокетах, подключениях TCP/UDP, маршрутизации и других сетевых статистических данных. Она предоставляет более богатый и гибкий функционал по сравнению с более старой утилитой netstat. Информация о сокете выводится в виде таблицы. Каждый столбец отображает определенную информацию, относящуюся к сокету.

Основные возможности ss:

1. Отображение сокетов по типам:
   - ss -t - отображает TCP-сокеты
   - ss -u - отображает UDP-сокеты
   - ss -x - отображает сокеты Unix Domain
   - ss -r - отображает PACKET-сокеты

2. Фильтрация сокетов:
   - ss -a - отображает все сокеты (включая сокеты в состоянии LISTEN)
   - ss -l - отображает только сокеты в состоянии LISTEN
   - ss -o - отображает информацию о связанных с сокетами таймерах

3. Форматирование вывода:
   - ss -n - отображает адреса в числовом формате (без попыток разрешения имен)
   - ss -p - отображает процессы, связанные с каждым сокетом
   - ss -e - отображает дополнительную информацию о сокетах

4. Управление вложенными фильтрами:
   - ss state FILTER-NAME-HERE - фильтрует сокеты по состоянию (например, ss state established)
   - ss dport = :PORT - фильтрует сокеты по номеру порта назначения

5. Просмотр статистики:
   - ss -s - отображает статистику использования сокетов (например, количество открытых сокетов)

Некоторые примеры использования ss:

- ss -t -a - отобразить все TCP-сокеты
- ss -u -l - отобразить UDP-сокеты в состоянии LISTEN
- ss -x src /tmp/.X11-unix/* - отобразить Unix Domain сокеты, связанные с X11
- ss -o state established '( dport = :ssh or sport = :ssh )' - отобразить установленные SSH-соединения с таймерами

Утилита ss обладает гибкостью и мощью, позволяя администраторам и разработчикам получать подробную информацию о сетевых сокетах системы и выполнять их фильтрацию по различным критериям. Она является предпочтительным инструментом для управления сокетами в современных Unix-подобных операционных системах.

Описание выводимой информации в столбцах:

  • Netid — отображает тип сокета;
  • State — отображает состояние сокета. Может принимать следующие значения: сокет установлен — ESTAB, сокет не подключен — UNCONN, сокет прослушивается — LISTEN.
  • Recv-Q — отображает количество принятых пакетов в очереди;
  • Send-Q — отображает количество отправленных пакетов в очереди;
  • Local address:port — показывает адрес локальной машины и порт;
  • Peer address:port — отображает адрес удаленной машины и порт.

Синтаксис утилиты ss выглядит следующим образом:

ss <опции>

Утилита ss может принимать несколько опций:

ss <опция_1> <опция_2> <опция_3> …

Основные опции утилиты ss:

  • -V, --version — показать версию утилиты;
  • -n, --numeric — не определять имена служб;
  • -r, --resolve — определять сетевые имена адресов с помощью DNS;
  • -a, --all — отобразить все сокеты (открытые соединения);
  • -l, --listening — показать только прослушиваемые сокеты;
  • -o, --options — показать информацию таймера;
  • -e, --extended — выводить расширенную информацию о сокете;
  • -p, --processes — показать процессы, использующие сокет;
  • -i, --info — посмотреть внутреннюю информацию TCP;
  • -s, --summary — статистика использования сокета;
  • -D, --diag=<файл> — экспортировать текущее состояние TCP-сокетов в файл;
  • -F, --filter=<файл> — работать с информацией, взятой из файла.

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

  • -4, --ipv4 — только сокеты протокола IPv4;
  • -6, --ipv6 — только сокеты протокола IPv6;
  • -0, --packet — только PACKET-сокеты;
  • -t, --tcp — TCP-сокеты;
  • -u, --udp — UDP-сокеты;
  • -x, --unix — UNIX-сокеты.

Для отображения всех TCP-соединений выполните команду:

ss -ta

Для отображения всех UDP-соединений выполните команду:

ss -ua

Для вывода информации о подключенных TCP- и UDP-сокетах, а также информации о процессах, которые используют сокеты — имя процесса и его PID, выполните:

ss -tupn

Для отображения открытых TCP- и UDP-сокетов, которые ожидают соединение, выполните команду, добавив опцию -l:

ss -tupnl


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

Для фильтрации информации по адресу назначения выполните:

ss dst xx.xx.xx.xx

Для фильтрации информации по адресу получения выполните:

ss src xx.xx.xx.xx

где xx.xx.xx.xx — IP-адрес, по которому необходимо отфильтровать информацию.

 

Вывод информации по состоянию сокета
Можно отфильтровать информацию по состоянию сокета. Для этого используется дополнительный ключ state.

Состояния, которые может принимать сокет:

  • established;
  • listening;
  • syn-sent;
  • syn-recv;
  • time-wait;
  • closed;
  • close-wait;
  • last-ack;
  • fin-wait-1;
  • fin-wait-2;
  • closing.

Кроме того, ss распознаёт следующие идентификаторы состояний:

  • all — все состояния;
  • connected — все состояния, кроме прослушиваемых и закрытых;
  • synchronized — все состояния, кроме syn-sent;
  • bucket — состояния, представляющие собой минисокеты, например, time-wait или syn-recv;
  • big — все состояния, кроме bucket.

Для отображения всех открытых TCP-портов выполните команду:

ss -t state listening

Для отображения всех успешных соединений по IPv4 выполните:

ss -4 state established


Вывод информации по имени сервиса или номеру порта
Для фильтрации информации по номеру порта или его имени утилите необходимо передать соответствующие опции:

для порта получения:

ss <опции> sport = :<порт>

для порта назначения:

ss <опции> dport = :<порт>

где <порт> — номер порта или имя сервиса.

Для фильтрации TCP-соединения с выводом информации об использовании только порта получателя 22 выполните:

ss -ta '( sport = :22 )'

Для фильтрации TCP-соединения с выводом информации об использовании сервиса HTTPS в адресе назначения выполните:

ss -ta '( dport = :https )'