Команда ss. Получение информации о сети

Последнее обновление: 17.03.2024

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

Команда ss может принимать ряд опций, которые определяют поведение команды. Отмечу некоторые из них:

  • -a, --all: выводит все сокеты

  • -r, --resolve: преобразовывать ip-адреса в имена хостов (домены)

  • -l, --listening: выводит сокеты, прослушивающие подключения

  • -e, --extended: выводит подробную информацию о сокетах

  • -m, --memory: выводит информацию об использовании памяти сокетами

  • -p, --processes: выводит процесс, который использует сокеты

  • -T, --threads: выводит поток, который использует сокеты

  • -i, --info: выводит внутреннюю информацию TCP

  • -s, --summary: выводит сводку об использовании сокетов

  • -E, --events: постоянно отображает сокеты по мере их уничтожения

  • -4, --ipv4: выводит только сокеты IP версии 4

  • -6, --ipv6: выводит только сокеты IP версии 6

  • -t, --tcp: выводит только TCP-сокеты

  • -u, --udp: выводит только UDP-сокеты

Например, используем команду ss -a для получения всей информации о сетевых соединениях:

eugene@Eugene:~$ ss -a
Netid    State         Recv-Q    Send-Q                                           Local Address:Port                            Peer Address:Port      Process    
nl       UNCONN        0         0                                                         rtnl:kernel                                      *                     
nl       UNCONN        0         0                                                         rtnl:code/4486                                   *                     
nl       UNCONN        0         0                                                         rtnl:chrome/3688                                 *                     
nl       UNCONN        0         0                                                         rtnl:goa-daemon/3300                             *                     
nl       UNCONN        0         0                                                         rtnl:evolution-addre/3353                        *                     
nl       UNCONN        0         0                                                         rtnl:avahi-daemon/1461                           *                     
nl       UNCONN        0         0                                                         rtnl:NetworkManager/1531                         *                     
nl       UNCONN        0         0                                                         rtnl:xdg-desktop-por/3452                        *                   
.....................................................................................................................................................               
tcp      ESTAB         0         0                                                192.168.0.108:55950                           5.255.255.70:https                
tcp      ESTAB         0         0                                                192.168.0.108:54012                         142.250.185.206:https                
tcp      ESTAB         0         0                                                192.168.0.108:37494                         185.125.190.20:https                 
tcp      ESTAB         0         0                                                192.168.0.108:48670                         142.250.185.206:https                
tcp      LISTEN        0         511                                                          *:http                                       *:*                    
tcp      LISTEN        0         4096                                                     [::1]:ipp                                     [::]:*                    
eugene@Eugene:~$ 

Выводимая командой ss таблица отображает следующую информацию:

  • Netid: отображает тип сокетов. В Linux есть множество различных типов сокетов. Например, в выводе выше отображается nl (netlink), который применяется для обмена информацией между ядром Linux и пользовательскими процессами. Другие распространенные типы - tcp, udp, us_str

  • State: состояние сокеты. Наиболее распространенные значения: ESTAB (established - установлено), UNCONN (unconnected - не подключено), LISTEN (listening - прослушивает подключения).

  • Recv-Q: количество пакетов, ожидающих в очереди для приема

  • Send-Q: количество пакетов, ожидающих в очереди для отправки

  • Local address:port: адрес локальной машины и порт

  • Peer address:port: адрес удаленной машины и порт, на который отправляются данные

Обратите внимание, что столбцы адресов отображают по умолчанию IP-адреса. Чтобы проще идентифицировать адреса, можно использовать опцию -r:

eugene@Eugene:~$ ss -ar
Netid    State         Recv-Q    Send-Q                                           Local Address:Port                            Peer Address:Port      Process    
nl       UNCONN        0         0                                                rtnl:kernel                                      *                     
nl       UNCONN        0         0                                                rtnl:code/4486                                   *                     
nl       UNCONN        0         0                                                rtnl:chrome/3688                                 *                     
nl       UNCONN        0         0                                                rtnl:goa-daemon/3300                             *                     
nl       UNCONN        0         0                                                rtnl:evolution-addre/3353                        *                     
nl       UNCONN        0         0                                                rtnl:avahi-daemon/1461                           *                     
nl       UNCONN        0         0                                                rtnl:NetworkManager/1531                         *                     
nl       UNCONN        0         0                                                rtnl:xdg-desktop-por/3452                        *                   
.....................................................................................................................................................               
tcp      ESTAB         0         0                                                Eugene:55950                           yandex.ru:https                
tcp      ESTAB         0         0                                                Eugene:54012                          google.com:https                
tcp      ESTAB         0         0                                                Eugene:37494                          ubuntu.com:https                 
tcp      ESTAB         0         0                                                Eugene:48670                          google.com:https                
tcp      LISTEN        0         511                                              *:http                                            *:*                    
tcp      LISTEN        0         4096                                             [::1]:ipp                                      [::]:*                    
eugene@Eugene:~$ 

Рассмотрим еще несколько полезных опций. Например, просмотр только прослушивающих соединения сокетов:

ss -l

Просмотр только TCP-сокетов:

ss -t

С помощью опции -p можно получить процессы, которые используют данный сокет:

                  
eugene@Eugene:~$ ss -p
Netid        State             Recv-Q        Send-Q                                          Local Address:Port                      Peer Address:Port          Process                                                                                                                                                         
u_str        ESTAB             272           0                                                           * 84831                                * 91637          users:(("evince",pid=7247,fd=9))                                                                                                                               
u_str        ESTAB             0             0                                          @/tmp/.X11-unix/X0 36353                                * 54291          users:(("Xwayland",pid=3724,fd=20))                                                                                                                            
u_str        ESTAB             0             0                                                           * 38469                                * 25566          users:(("gsd-wacom",pid=3148,fd=11))                                                                                                                           
u_str        ESTAB             0             0                                   /run/user/1000/pipewire-0 101623                               * 100859         users:(("pipewire",pid=2650,fd=58))                                                                                                                            
u_str        ESTAB             0             0                                                           * 99603                                * 99602          users:(("code",pid=6887,fd=96))         
..........................

Аналогично можно получить все процессы, которые используют только сокеты TCP:

ene:~$ ss -pt
State               Recv-Q               Send-Q                             Local Address:Port                                Peer Address:Port                Process                                           
ESTAB               0                    0                                  192.168.0.108:58832                               5.255.255.70:https                users:(("chrome",pid=3851,fd=32))                
ESTAB               0                    0                                  192.168.0.108:38568                               5.255.255.77:https                users:(("chrome",pid=3851,fd=98))                
ESTAB               0                    0                                  192.168.0.108:55854                             213.180.204.90:https                users:(("chrome",pid=3851,fd=106))               
ESTAB               0                    0                                  192.168.0.108:32880                               5.255.255.77:https                users:(("chrome",pid=3851,fd=69))                
ESTAB               0                    0                                  192.168.0.108:58716                             185.125.190.29:https                users:(("chrome",pid=3851,fd=58))                
ESTAB               0                    0                                  192.168.0.108:51456                             185.125.190.29:https                users:(("chrome",pid=3851,fd=55))  
.............................................

Аналогично можно получить процессы, но с доменными именами вместо IP-адресов:

ss -ptr

Фильтрация

Команда ss позволяет фильтровать вывод по определенным критериям. Некоторые фильтры:

  • dst: фильтрует по определенному адресу назначения

  • src: фильтрует по определенному исходящему адресу

  • state: фильтрация по состоянию

Например, найдем все подключения, которые обращаются к адресу "64.233.165.113" (google.com):

eugene@Eugene:~$ ss dst 64.233.165.113
Netid          State          Recv-Q          Send-Q                     Local Address:Port                        Peer Address:Port           Process          
tcp            ESTAB          0               0                          192.168.0.108:46334                     64.233.165.113:https                           
eugene@Eugene:~$ 

Аналогично найдем все подключения, в которые исходящий адрес на локальной машине - 192.168.0.108:55854

eugene@Eugene:~$ ss src 192.168.0.108:55854
Netid          State          Recv-Q          Send-Q                     Local Address:Port                        Peer Address:Port           Process          
tcp            ESTAB          0               0                          192.168.0.108:55854                     185.125.190.29:https                          
eugene@Eugene:~$ 

В данном случае применялася порт. Но также можно было бы вывести и по определенному адресу:

ss src 192.168.0.108

Также можно отфильтровать только по порту:

eugene@Eugene:~$ ss src :55854
Netid                State                Recv-Q                Send-Q                               Local Address:Port                                  Peer Address:Port 
tcp                  ESTAB                0                     0                                    192.168.0.108:55854                               185.125.190.29:https  

Если надо получить имена хостов, а не IP-адреса, то, как и в общем случае, можно использовать флаг -r:

ss -r src 192.168.0.108

Можно использовать сразу оба фильтра:

ss -a src :55854 or dst :https

В данном случае получаем все соединения, где локальная машина использует порт 55854, либо где удаленный хост использует https

Или отфильтруем по состоянию "listening" tcp-сокеты:

eugene@Eugene:~$ ss -t state listening
Recv-Q                      Send-Q                                           Local Address:Port                                              Peer Address:Port                      Process                      
0                           4096                                             127.0.0.53%lo:domain                                                 0.0.0.0:*                                
0                           4096                                                127.0.0.54:domain                                                 0.0.0.0:*                                                      
0                           4096                                                 127.0.0.1:ipp                                                    0.0.0.0:*                                 
0                           511                                                          *:http                                                         *:*                                
0                           4096                                                     [::1]:ipp                                                       [::]:*  

Текстовая фильтрация

Также, как и с другими командами, можно получить текстовый вывод команды и в нем уже искать определенный текст, например, с помощью команды grep:

eugene@Eugene:~$ ss -r | grep "1e100.net"
udp   ESTAB      0      0                                      Eugene:33724   lq-in-f94.1e100.net:https        
udp   ESTAB      0      0                                      Eugene:33813   lb-in-f94.1e100.net:https        
udp   ESTAB      0      0                                      Eugene:49685  lu-in-f103.1e100.net:https        
tcp   ESTAB      0      0                                      Eugene:36868  lg-in-f101.1e100.net:https        
tcp   FIN-WAIT-1 0      605                                    Eugene:58502  lq-in-f154.1e100.net:https        
tcp   ESTAB      0      0                                      Eugene:53820   lr-in-f94.1e100.net:https        
tcp   ESTAB      0      540                                    Eugene:60092  lq-in-f154.1e100.net:https        
tcp   ESTAB      0      0                                      Eugene:46016   lg-in-f95.1e100.net:https        
tcp   ESTAB      0      0                                      Eugene:39640   os-in-f94.1e100.net:https        
eugene@Eugene:~$ 

В данном случае выполняется поиск подключений, которые идут к доменам на "1e100.net".

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850