Команда ss — это современная замена классическому netstat. Вы можете использовать его в Linux для получения статистики о ваших сетевых подключениях. Вот как работать с этим удобным инструментом.
Оглавление
Команда ss против netstat
Замена устаревшего команда netstat, сс дает вам подробную информацию о том, как ваш компьютер взаимодействует с другими компьютерами, сетями и службами.
ss отображает статистику для Протокол управления передачей (TCP), Протокол пользовательских датаграмм (UDP), Unix (межпроцессный), и сырые сокеты. Необработанные сокеты работать в сетевой уровень OSI, что означает, что заголовки TCP и UDP должны обрабатываться прикладным программным обеспечением, а не транспортным уровнем. Протокол управляющих сообщений Интернета (ICMP) сообщения и пинг обе утилиты используют необработанные сокеты.
Использование ss
Вам не нужно устанавливать ss, поскольку он уже входит в состав современного дистрибутива Linux. Однако его вывод может быть очень длинным — у нас были результаты, содержащие более 630 строк. Результаты тоже очень широкие.
Из-за этого мы включили текстовые представления полученных результатов, поскольку они не помещаются на снимке экрана. Мы обрезали их, чтобы сделать их более управляемыми.
Список сетевых подключений
Использование 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).
Peer Address: Port: удаленный адрес и порт (или эквивалентные значения для сокетов Unix).
Для сокетов UDP столбец «Состояние» обычно пуст. Для сокетов TCP это может быть одно из следующих значений:
СЛУШАТЬ: только на стороне сервера. Сокет ожидает запроса на подключение.
SYN-SENT: только на стороне клиента. Этот сокет сделал запрос на подключение и ждет, чтобы узнать, будет ли он принят.
SYN-RECEIVED: только на стороне сервера. Этот сокет ожидает подтверждения подключения после принятия запроса на подключение.
УСТАНОВЛЕНО: Сервер и клиенты. Между сервером и клиентом установлено рабочее соединение, позволяющее передавать данные между ними.
FIN-WAIT-1: Сервер и клиенты. Этот сокет ожидает запроса на прекращение соединения от удаленного сокета или подтверждения запроса на прекращение соединения, который был ранее отправлен из этого сокета.
FIN-WAIT-2: Сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета.
ЗАКРЫТЬ-ПОДОЖДИТЕ: сервер и клиент. Этот сокет ожидает запроса на прекращение соединения от локального пользователя.
ЗАКРЫТИЕ: Сервер и клиенты. Этот сокет ожидает подтверждения запроса на завершение соединения от удаленного сокета.
LAST-ACK: сервер и клиент. Этот сокет ожидает подтверждения запроса на завершение соединения, отправленного удаленному сокету.
ВРЕМЯ-ОЖИДАНИЕ: Сервер и клиенты. Этот сокет отправил удаленному сокету подтверждение, чтобы он знал, что получил запрос на завершение удаленного сокета. Теперь он ждет, чтобы убедиться, что подтверждение было получено.
ЗАКРЫТО: соединение отсутствует, значит, сокет отключен.
Вывод списка прослушивающих сокетов
Чтобы увидеть прослушивающие сокеты, мы добавим параметр -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 (все):
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
Вывод списка сокетов 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: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
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 established
Перечислены четыре соединения, которые находятся в установленном состоянии. Имя хоста, ubuntu20-04, было разрешено, и вместо 22 для SSH-соединения во второй строке отображается «ssh».
Мы можем повторить это, чтобы искать сокеты в состоянии прослушивания:
ss -t -r state listening
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 для установленного соединения (обратите внимание на пробел после открывающей скобки и перед закрывающей):
ss -a state established ‘( dport = :https or sport = :https )’
Мы можем использовать имя протокола или порт, обычно связанный с этим протоколом. Порт по умолчанию для Безопасная оболочка (SSH) — это порт 22.
Мы будем использовать имя протокола в одной команде, а затем повторить его, используя номер порта:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or 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 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
Это показывает нам, что два установленных соединения на сокетах TCP используются демоном SSH и Firefox.
Достойный преемник
Команда ss предоставляет ту же информацию, которую ранее предоставляла netstat, но более простым и доступным способом. Вы можете проверить страница руководства для получения дополнительных опций и советов.