Как использовать команду ss в Linux
Команда ss
— это современная замена классической netstat
. Вы можете использовать его в Linux для получения статистики о ваших сетевых подключениях. Вот как работать с этим удобным инструментом.
Команда ss против netstat
Замена устаревшей команды netstat
, ss
, предоставляет вам подробную информацию о том, как ваш компьютер взаимодействует с другими компьютерами, сетями и службами.
ss
отображает статистику для протокола управления передачей (TCP), протокола пользовательских дейтаграмм (UDP), Unix (межпроцессный) и необработанных сокетов. Необработанные сокеты работают на сетевом уровне OSI, что означает, что заголовки TCP и UDP должны обрабатываться прикладным программным обеспечением, а не транспортным уровнем. Сообщения протокола управляющих сообщений Интернета (ICMP) и утилита ping используют необработанные сокеты.
Использование СС
Вам не нужно устанавливать 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», сокет IP версии 6 ICMP. Дополнительные описания типов сокетов Linux можно найти на справочных страницах Linux.
- Состояние: состояние, в котором находится сокет.
- Recv-Q: количество полученных пакетов.
- Send-Q: количество отправленных пакетов.
- Локальный адрес:порт: локальный адрес и порт (или эквивалентные значения для сокетов Unix).
- Peer Address:Port: удаленный адрес и порт (или эквивалентные значения для сокетов Unix).
Для сокетов UDP столбец «Состояние» обычно пуст. Для сокетов TCP это может быть одно из следующих:
- ПРОСЛУШИВАТЬ: только на стороне сервера. Сокет ожидает запроса на подключение.
- SYN-SENT: только на стороне клиента. Этот сокет сделал запрос на подключение и ожидает, будет ли он принят.
- SYN-RECEIVED: только на стороне сервера. Этот сокет ожидает подтверждения соединения после принятия запроса на соединение.
- УСТАНОВЛЕНО: сервер и клиенты. Между сервером и клиентом установлено рабочее соединение, позволяющее передавать данные между ними.
- FIN-WAIT-1: сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета или подтверждения запроса на завершение соединения, который ранее был отправлен из этого сокета.
- FIN-WAIT-2: сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета.
- ПОДОЖДИТЕ: сервер и клиент. Этот сокет ожидает запроса на завершение соединения от локального пользователя.
- ЗАКРЫТИЕ: сервер и клиенты. Этот сокет ожидает подтверждения запроса на завершение соединения от удаленного сокета.
- ПОСЛЕДНИЙ ПОДТВЕРЖДЕНИЕ: сервер и клиент. Этот сокет ожидает подтверждения запроса на завершение соединения, отправленного на удаленный сокет.
- 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» означает маршрутизацию netlink, которая используется для передачи информации между процессами ядра и пользовательского пространства.
Список всех сокетов
Чтобы вывести список всех сокетов, вы можете использовать параметр -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
Список сокетов по состоянию
Вы можете перечислить сокеты по состоянию, в котором они находятся, с помощью параметра state
. Это работает с установленными, прослушиваемыми или закрытыми состояниями. Мы также будем использовать параметр разрешения (-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 )'
Мы можем использовать имя протокола или порт, обычно связанный с этим протоколом. Порт по умолчанию для Secure Shell (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
, но в более простом и доступном виде. Вы можете проверить справочную страницу для получения дополнительных опций и советов.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts