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

Гайд в разделе Linux Как использовать команду ss в Linux содержит информацию, советы и подсказки, которые помогут изучить самые важные моменты и тонкости вопроса….

A terminal window on a Linux laptop system. Фатмавати Ахмад Зэнури / Shutterstock

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

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

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

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

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

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

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

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

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

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

ss

Состояние Netid Recv-Q Send-Q Локальный адрес: Адрес узла порта: Процесс порта 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 / / 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

Ниже представлены столбцы:

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

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

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

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

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

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

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

ss -a

Netid State Recv-Q Send- Q Локальный адрес: Адрес узла порта: Процесс порта 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

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

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

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: домен 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

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

Список сокетов IP версии 4

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

ss -a -4

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

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

ss -a -6

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

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

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

ss -t -r state installed

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

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

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

Локальный адрес Recv-Q Send-Q: Адрес узла порта: Процесс порта 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:* 0100 локальный хост: smtp 0.0.0.0: * 0 128 [::]: ssh [::]: * 0 5 ip6-localhost: ipp [::]: * 0 100 ip6-localhost: smtp [::]: * Список сокетов по протоколу

Вы можете перечислить сокеты, используя определенный протокол, с параметрами dport и sport, которые представляют порты назначения и источника соответственно.

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

ss -a state installed ‘(dport =: https или sport =: https) ‘

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

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

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

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

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

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

Мы вводим следующее:

ss -a dst 192.168.4.25

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

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

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 пользователи: ((«sshd», pid = 4086, fd = 4), («sshd», pid = 3985, fd = 4))

Это показывает нам, что два установленных соединения на сокетах TCP используются используется демоном SSH и Firefox.

Достойный преемник

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

Как использовать команду ss в Linux
Теги:
Linux Гайды

Для получения большей информации о секретах и подсказках по разделу Linux легко перейдите в гайды Linux по указанной выше ссылке.

0 05.02.2021 Антон
<>

Напишите несколько строк :