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

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

Сети Linux

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

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

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

 

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

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

# ss -s

 

 

Пример вывода:
Total: 734 (kernel 904)
TCP: 1415 (estab 112, closed 1259, orphaned 11, synrecv 0, timewait 1258/0), ports 566

Transport       Total        IP       IPv6
*                      904         -          -
RAW                  0          0          0
UDP                 15        12          3
TCP                 156      134        22
INET                171      146        25
FRAG                0           0           0

 

 

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

# ss -l

 

 

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


ss -l
Recv-Q          Send-Q                          Local Address:Port                                    Peer Address:Port
0                        0                                   127.0.0.1:smux                                                           *:*
0                        0                                   127.0.0.1:10024                                                          *:*
0                        0                                   127.0.0.1:10025                                                          *:*
0                        0                                                *:3306                                                            *:*
0                        0                                                 *:http                                                            *:*
0                        0                                                 *:4949                                                           *:*
0                        0                                                 *:domain                                                       *:*
0                        0                                                 *:ssh                                                              *:*
0                        0                                                 *:smtp                                                           *:*
0                        0                                    127.0.0.1:rndc                                                            *:*
0                        0                                    127.0.0.1:6010                                                            *:*
0                        0                                                 *:https                                                           *:*
0                        0                                                :::34571                                                          :::*
0                        0                                                :::34572                                                          :::*
0                        0                                                :::34573                                                          :::*
0                        0                                                 ::1:rndc                                                          :::*

 

 

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

 

 

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

# ss -lp | grep 4949

 

 

Пример вывода:
0       0     *:4949          *:*        users:(("munin-node",3772,5))

 

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

# cd /proc/3772
# ls -l

 

 

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

# ss -t -a

 

 

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

# ss -u -a

 

 

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

# ss -w -a

 

 

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

# ss -x -a

 

 

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

#ss -t -a

 

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

# ss -o state established '( dport = :smtp or sport = :smtp )'

 

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

# ss -o state established '( dport = :http or sport = :http )'

 

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

# ss -x src /tmp/.X11-unix/*

 

 

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

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

# ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 202.54.1/24

 

 

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

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

## tcp ipv4 ##
ss -4 state FILTER-NAME-HERE

## tcp ipv6 ##
ss -6 state FILTER-NAME-HERE

 

Где 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

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

ss -4 state closing

 

Recv-Q       Send-Q             Local Address:Port               Peer Address:Port
1              11094           75.126.153.214:http               175.44.24.85:4669

 

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

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

ss dst ADDRESS_PATTERN

## Показать все порты, подключенные с удаленного 192.168.1.5 ##
ss dst 192.168.1.5

## Показать все порты, подключенные с удаленного 192.168.1.5:http порта##
ss dst 192.168.1.5:http
ss dst 192.168.1.5:smtp
ss dst 192.168.1.5:443

 

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

# ss dst 123.1.2.100:http

 

 

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


State         Recv-Q            Send-Q               Local Address:Port                        Peer Address:Port
ESTAB           0                      0                   75.126.153.206:http                        123.1.2.100:35710
ESTAB           0                      0                   75.126.153.206:http                        123.1.2.100:35758

 

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

ss src ADDRESS_PATTERN
### Узнать все ips, связанные с ip-адресом nixcraft.com. 75.126.153.214 ###
## Показать все порты, подключенные к локальным 75.126.153.214 ##
ss src 75.126.153.214

## http (80) port only ##
ss src 75.126.153.214:http
ss src 75.126.153.214:80

## smtp (25) port only ##
ss src 75.126.153.214:smtp
ss src 75.126.153.214:25

 

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

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

## Сравнивает удаленный порт с номером ##
ss dport OP PORT

## Сравнивает локальный порт с номером ##
sport OP PORT

 

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

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

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

Пример:
 ########################## Избегайте специальных символов при вводе их в командной строке##########################
ss sport = :http
ss dport = :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss \( sport = :http or sport = :https \)
ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24

 

 

Флаги для команды 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 следующим образом:

# time netstat -at

 

 

Пример вывода:
real 2m52.254s
user 0m0.178s
sys 0m0.170s

 

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

# time ss -atr

 

 

Пример вывода:
real 2m11.102s
user 0m0.124s
sys 0m0.068s

 

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

$ man ss

 

 

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

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасностикурсы DevNet (программируемые сети) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
Сети Linux

Больше похожих постов

1 комментарий. Оставить новый

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню