Команда ss с примерами: отображение информации о сети/сокете TCP/UDP в Linux

Команда ss используется для отображения статистики сокетов. Она может отображать статистику для сокетов: PACKETTCPUDPDCCPRAW, сокетов Unix и т.д. Также она позволяет отображать информацию, аналогичную команде netstat. Команда ss может отображать наибольшее количество информации о TCP по сравнению с другими инструментами. Это новый, невероятно полезный и быстрый (по сравнению с netstat) инструмент для отслеживания TCP-соединений и сокетов. SS может предоставить информацию о:

  • Всех сокетах TCP.
  • Всех сокетах UDP.
  • Всех установленных соединениях ssh/ftp/http/https.
  • Всех локальных процессах, подключенных к X-серверу.
  • Всех сокетах tcp в состоянии FIN-WAIT-1
  • Может выполнять фильтрацию по состоянию подключенных и синхронизированных, SYN-RECVSYN-SENTTIME-WAIT адресов и портов.

Некоторые дистрибутивы Linux считали команду nestat устаревшей и поэтому должны быть поэтапно отменить её в пользу более современных решений, таких как команда ss. Сейчас большинство дистрибутивов Linuxпоставляется уже с предустановленным ss. Знакомство с этим инструментом помогает улучшить понимание того, что происходит в системных сокетах, и позволяет найти возможные причины проблемы производительности.

 

Как отобразить сводки с помощью команды ss?

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

Пример вывода:

Как отобразить все открытые сетевые порты с помощью команды ss в Linux?

Пример вывода:

 

Введите следующую команду, чтобы просмотреть имя процесса с использованием открытого сокета:
bash][# ss -pl[/bash]

Узнайте, кто отвечает за открытие сокета на port 4949:

Пример вывода:

munin-node (PID # 3772) отвечает за открытие порта 4949. Вы можете получить дополнительную информацию об этом процессе (например, о памяти, пользователях, текущей рабочей директории и т. д.), посетив каталог /proc/3772:

Показать все TCP-сокеты

Показать все UDP-сокеты

Показать все RAW сокеты

Показать все UNIX-сокеты

Примеры вывода:

Показать все установленные соединения SMTP

Показать все установленные HTTP-соединения

Найти все локальные процессы, подключенные к X-серверу

Вывести список всех сокетов TCP в состоянии FIN-WAIT-1

Выведите все сокеты TCP в состоянии -FIN-WAIT-1 для нашего httpd в сети 202.54.1/24 и посмотрите на их таймеры:

Как фильтровать сокеты с использованием состояний TCP?

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

Где FILTER-NAME-HERE может быть любым из приведенных ниже:

  1. established
  2. syn-sent
  3. syn-recv
  4. fin-wait-1
  5. fin-wait-2
  6. time-wait
  7. closed
  8. close-wait
  9. last-ack
  10. listen
  11. closing
  12. all : все вышеперечисленные состояния
  13. connected : все состояния, за исключением прослушивания и закрытия
  14. synchronized : все подключенные состояния, за исключением syn-sent
  15. bucket : gоказывать состояния, которые поддерживаются как мини-сокеты, т.е. время ожидания и syn-recv.
  16. big : Противоположно состоянию bucket.

Примеры команды ss

Введите следующую команду, чтобы увидеть закрывающие сокеты:

 

 

Как сопоставить ip удаленных адресов и портов?

Используйте следующий синтаксис:

Узнайте о подключении удаленного клиента с  123.1.2.100:http к нашим локальным виртуальным серверам:

Примеры вывода:

 

Как мне сравнить локальный адрес и номера портов?

Как сравнить локальный и/или удаленный порт с номером?

Используйте следующий синтаксис:

Где OP может быть одним из следующих:

  1. <= или le : меньше или равно порту
  2. >= или ge : больше или равно порту
  3. == или eq : равно порту
  4. != или ne : не равно порту
  5. < или gt : меньше, чем порт
  6. > или lt : больше, чем порт

Примечаниеle, gt, eq, ne и т.д. также используются в оболочке unix.

Пример:

Флаги для команды ss:

-h, —help                           это сообщение
-V, —version                      вывод информации о версии
-n, —numeric                     запрет имён служб
-r, —resolve                       разрешения имён хостов
-a, —all                              отображение всех сокетов
-l, —listening                     показать сокеты для прослушивания
-o, —options                     показывает информацию таймера
-e, —extend                      показать подробную информацию о сокетах
-m, —memory                   показать использование памяти сокета
-p, —processes                  показать процесс с помощью сокета
-i, —info                             показать внутреннюю информацию TCP
-s, -summary                     показать итоги использования сокета

-4, —ipv4                           отображает только сокеты IP версии 4
-6, -ipv6                            отображает только сокеты IP версии 6
-0, —packet display           пакетные сокеты
-t, —tcp                             отображать только TCP-сокеты
-u, —udp                           отображать только UDP-сокеты
-d, —dccp                          отображать только сокеты DCCP
-w, -raw                             отображать только RAW-сокеты
-x, —unix                           отображать только сокеты Unix домена
-f, —family=FAMILY          отображать сокеты типа FAMILY

-A, —query = QUERY, —socket = QUERY
QUERY: = {all | inet | tcp | udp | raw | unix | packet | netlink} [, QUERY]

-D, —diag = FILE               дамп исходной информации о сокетах TCP для FILE
-F, —filter = FILE               считывать информацию о фильтрах из FILE
FILTER: = [state TCP-STATE] [EXPRESSION]

Сравнение скорости работы команды ss с netstat

Используйте команду time для запуска обеих программ и сравните выводы по использованию ресурсов системы. Введите команду netstat следующим образом:

Пример вывода:

Теперь попробуйте выполнить команду ss:

Пример вывода:

Примечание. Оба вывода берутся с ускоренного прокси-сервера, работающего на RHEL v6.x amd64. Для получения дополнительной информации см. страницу ss command man:

 

Спасибо за уделенное время на прочтение статьи!