Як використовувати команду ss в Linux

| | 0 Comments| 2:41 PM
Categories:

Команда ss є сучасною заміною класичного netstat. Ви можете використовувати його в Linux, щоб отримати статистику ваших мережевих підключень. Ось як працювати з цим зручним інструментом.

Команда ss проти netstat

Заміна для застарілих команду netstat, сс надає вам детальну інформацію про те, як ваш комп’ютер взаємодіє з іншими комп’ютерами, мережами та службами.

ss відображає статистику для Протокол управління передачею (TCP), Протокол дейтаграм користувача (UDP), Unix (міжпроцесний), і необроблені розетки. Сирі розетки діють на мережевий рівень OSI, що означає, що заголовки TCP і UDP повинні оброблятися програмним забезпеченням, а не транспортним рівнем. Internet Control Message Protocol (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-сокетів).

  Як встановити найновіші драйвери графічного процесора Nvidia на Linux

Для сокетів UDP стовпець «Стан» зазвичай порожній. Для сокетів TCP це може бути одне з наступного:

СЛУХАТИ: Лише на стороні сервера. Сокет чекає запиту на підключення.
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» означає мережеве посилання маршрутизації, яке використовується для передачі інформації між процесами ядра та простору користувача.

  Як скопіювати файли за допомогою команди «install» у Linux

Перелік усіх сокетів

Щоб перерахувати всі сокети, ви можете використовувати параметр -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:

сс -а -т

Перелік 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 (необроблений):

ss -a -w

Перелік сокетів IP версії 4

Розетки, які використовують протокол TCP/IP версії 4, можна перерахувати за допомогою параметра -4 (IPV4):

ss -a -4

Перелік сокетів IP версії 6

Ви можете ввімкнути відповідний фільтр IP версії 6 за допомогою параметра -6 (IPV6), наприклад:

ss -a -6

Перелік сокетів за станом

Ви можете перерахувати сокети за станом, у якому вони перебувають за допомогою параметра стану. Це працює з встановленими, слухаючими або закритими станами. Ми також будемо використовувати параметр розв’язання (-r), який намагається розв’язувати мережеві адреси з іменами, а порти — з протоколами.

  Як налаштувати Rsync на Linux

Наступна команда шукатиме встановлені TCP-з’єднання, а ss спробує розв’язати імена:

ss -t -r state established

Перелічено чотири з’єднання, які перебувають у встановленому стані. Ім’я хоста, ubuntu20-04, було вирішено, і «ssh» відображається замість 22 для з’єднання 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 (destination) ми можемо перерахувати підключення до певної IP-адреси призначення.

Набираємо наступне:

ss -a dst 192.168.4.25

Ідентифікаційні процеси

Щоб побачити, які процеси використовують сокети, ви можете використовувати параметр process (-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, але більш простим і доступним способом. Ви можете перевірити сторінка людини для отримання додаткових опцій та порад.