Утиліта ss в linux

Іноді буває необхідно подивитися які мережеві підключення linux відкриті, які ip адреси використовуються або які порти прослуховуються. Раніше для таких цілей використовувалася утиліта netstat. Її, без сумніву, знають всі системні адміністратори і фахівці з безпеки. Але вона більше не поставляється за замовчуванням в нових дистрибутивах. Замість неї використовується нова утиліта ss в linux.

Netstat сканує директорію / proc для отримання необхідної інформації, але в нових версіях ядра була реалізована спеціальна підсистема для моніторингу мережі в Linux. Її і використовує ss, за допомогою цієї утиліти ви можете отримати більше інформації про мережеві підключення і працює вона набагато швидше.

Як ви вже зрозуміли в цій статті ми розглянемо моніторинг мережевих підключень в Linux за допомогою утиліти з пакета iproute - ss linux. Почнемо, як завжди, з синтаксису і основних опцій.

Загальна інформація

Як вже було сказано працює утиліта ss в Linux на основі підсистеми ядра. Синтаксис дуже простий - сама команда і її опції:

$ ss опції [фільтр_состоянія] [Фільтр_адреса]

Для зручності висновок команди ss можна фільтрувати за допомогою grep:

$ ss опції | grep шаблон

Опції вказує різні параметри відображення і фільтрації інформації. Фільтри станом і адресою дуже цікава річ, вони дозволяють виконувати моніторинг мережевих підключень в Linux, тільки тих що потрібно. Наприклад, тільки відкритих, закритих або знаходяться на етапі підключення. Детальніше ми розглянемо це в кінці статті.

Опції утиліти ss

Для підключення до мережі в Linux за допомогою утиліти ss можна використовувати такі опції:

  • -V - Version показати версію утиліти
  • -n - Numeric не визначати імена служб
  • -r - Resolve визначати мережеві імена адрес за допомогою dns
  • -a - All відобразити всі сокети (відкриті з`єднання)
  • -l - Listening показати тільки прослуховуються сокети
  • -o - Options показати інформацію таймера
  • -e - Extended виводити розширену інформацію про сокеті
  • -p - Processes, показати процеси, що використовують сокет
  • -i - Internal, подивитися внутрішню інформацію TCP
  • -s - Summary, статистика використання сокета
  • -D - експортувати поточний стан TCP сокетів в файл
  • -F - працювати з інформацією, взятої з файлу

Крім того, можна вивести сокети тільки потрібного протоколу:

  • -4, --ipv4 - тільки сокети протоколу IP версії 4
  • -6 --ipv6 - тільки сокети протоколу IP версії 6
  • -0, --packet - тільки PACKET сокети
  • -t, --tcp - TCP сокети
  • -u, --udp - UDP сокети
  • -d, --dhcp - DHCP сокети
  • -r, --raw - RAW сокети
  • -x, --unix - UNIX сокети

Для фільтрації протоколів можна використовувати не тільки ці опції, а й універсальну опцію -f, передавши їй в параметрі назву протоколу. Тут зібрані самі основні опції, якщо вам потрібно більше інформації - дивіться довідку команди.

приклади використання

А тепер давайте розглянемо приклади використання утиліти ss Linux. Можливо, з опису опцій ви мало що зрозуміли, але з прикладами все встане на свої місця.

Моніторинг мережевих підключень

Спочатку дивимося всі мережеві підключення:

Netid State Recv-Q Send-Q Local Address: Port Peer Address: Port
u_str ESTAB 0 0 / var / run / dbus / system_bus_socket 5114 * 0
u_str ESTAB 0 0 / var / run / dbus / system_bus_socket 5125 * 0
u_str ESTAB 0 0 / var / run / dbus / system_bus_socket 5226 * 0
u_str ESTAB 0 0 * 5309 * 0
u_str ESTAB 0 0 / var / run / dbus / system_bus_socket 5310 * 0

Подивимося тільки TCP з`єднання:

Відео: How To Monitor Network Activity On Linux

$ Sudo ss -f tcp
ESTAB 0 0 192.168.1.2:35006 64.233.165.189:https
ESTAB 0 0 192.168.1.2:42537 87.240.144.247:http
ESTAB 0 0 192.168.1.2:50290 185.32.251.2:https
ESTAB 0 0 192.168.1.2:50873 173.194.222.188:https
ESTAB 0 0 127.0.0.1:42245 127.0.0.1:nut


Тепер тільки Unix:

$ Sudo ss -x
u_str ESTAB 0 0 * 989 * 0
u_str ESTAB 0 0 * 990 * 0
u_str ESTAB 0 0 * 5109 * 0
u_str ESTAB 0 0 * 5110 * 0
u_str ESTAB 0 0 / var / run / dbus / system_bus_socket 5114 * 0

Для відображення UDP сокетів використовуйте опцію u. За замовчуванням будуть показані тільки підключення з`єднання. Якщо хочете отримати все, потрібно використовувати опцію a. Оскільки UDP, це протокол без постійного з`єднання, то без опції -a ми нічого не побачимо:

$ Sudo ss -ua
UNCONN 0 0 192.168.1.2:56575 *: *
UNCONN 0 0 *: 40309 *: *
UNCONN 0 0 192.168.1.2:56879 *: *
UNCONN 0 0 *: 49014 *: *
UNCONN 0 0 192.168.1.2:53124 *: *
UNCONN 0 0 127.0.1.1:domain *: *

За замовчуванням утиліта не намагається визначати імена хостів через dns, але можна її попросити робити це опцією -r:

$ Sudo ss -tr
ESTAB 0 0 192.168.1.2:39774 ord08s12-in-f31.1e100.net:https
ESTAB 0 0 192.168.1.2:43104 le-in-f139.1e100.net:https
ESTAB 368 0 192.168.1.2:44073 bud02s21-in-f174.1e100.net:https
ESTAB 0 0 192.168.1.2:35003 lg-in-f189.1e100.net:https
ESTAB 0 0 192.168.1.2:39131 157.55.235.161:40026

Зворотній опція -n, не виконуватиметься не тільки dns резолвінг, але і визначення протоколів портів, зате моніторинг мережі в Linux працювати буде швидше:

$ Sudo ss -tn
ESTAB 0 0 192.168.1.2:44623 158.69.120.146:443
ESTAB 0 0 192.168.1.2:35006 64.233.165.189:443
ESTAB 0 0 192.168.1.2:44625 158.69.120.146:443
ESTAB 368 0 192.168.1.2:44074 216.58.209.174:443
ESTAB 0 0 192.168.1.2:42537 87.240.144.247:80

Тепер переглянемо тільки прослуховуються tcp сокети.

LISTEN 0 0 *: ssh *: *
LISTEN 0 0 ::: microsoft-ds ::: *
LISTEN 0 0 ::: netbios-ssn ::: *
LISTEN 0 0 ::: ssh ::: *

Тут ми бачимо тільки імена служб, це не завжди зручно, вказавши опцію n, ми отримаємо номера портів.

Так же само можна подивитися прослуховуються udp сокети:

UNCONN 0 0 192.168.1.2:ntp *: *
UNCONN 0 0 25.81.248.51:ntp *: *
UNCONN 0 0 127.0.0.1:ntp *: *
UNCONN 0 0 *: ntp *: *


Також ми можемо спробувати дізнатися назву і PID процесу, що використовує сокет:

LISTEN 0 0 127.0.0.1:9050 *: * users: (( "tor", pid = 2602, fd = 7))
LISTEN 0 0 *: microsoft-ds *: * users: (( "smbd", pid = 2540, fd = 29))
LISTEN 0 0 127.0.0.1:nut *: * users: (( "upsd", pid = 2657, fd = 4))
LISTEN 0 0 *: netbios-ssn *: * users: (( "smbd", pid = 2540, fd = 30))

Перегляд статистики статистики здійснювати підключення до мережі

Для перегляду статистики по використанню мережевих підключень наберіть:

Total: 854 (kernel 1010)
TCP: 36 (estab 22, closed 3, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total IP IPv6
* 1010 -;
RAW 2 Будiвництво 1 1
UDP 28 21 7
TCP 33 30 3
INET 63 52 11
FRAG 0 0 0

За допомогою опції -о можна подивитися інформацію про таймер і стан підключення.

tcp ESTAB 0 0 192.168.1.2:57862 46.29.160.21:http timer: (keepalive, 33sec, 0)
tcp ESTAB 0 0 192.168.1.2:55539 74.125.205.94:https timer: (keepalive, 43sec, 0)
tcp ESTAB 0 0 192.168.1.2:37930 95.213.4.196:https timer: (keepalive, 830ms, 0)
tcp ESTAB 0 0 192.168.1.2:52991 157.56.192.174:https
tcp ESTAB 0 0 192.168.1.2:39819 87.240.131.118:http timer: (keepalive, 37sec, 0)
tcp ESTAB 0 0 192.168.1.2:45874 87.240.131.99:https timer: (keepalive, 10sec, 0)

Фільтрація по протоколу

Ми можемо відображати тільки потрібний нам протокол. Наприклад тільки ipv4:

$ Sudo ss -tl4
LISTEN 0 0 127.0.0.1:9050 *: *
LISTEN 0 0 *: microsoft-ds *: *
LISTEN 0 0 127.0.0.1:nut *: *
LISTEN 0 0 *: netbios-ssn *: *
LISTEN 0 0 *: 9518 *: *
LISTEN 0 0 *: ssh *: *

Так же само можна відобразити тільки з`єднання ipv6:

$ Sudo ss -tl6
LISTEN 0 0 ::: microsoft-ds ::: *
LISTEN 0 0 ::: netbios-ssn ::: *
LISTEN 0 0 ::: ssh ::: *

Фільтрація за станом з`єднання

У синтаксисі команди ми описали два додаткові параметри. Фільтрація стану і фільтрація за адресою. Розглянемо тепер як ними користуватися. Сокет TCP може перебувати в одному з декількох станів. Наприклад, так утиліта ss linux виведе тільки підключення сокети.

$ Ss -t4 state established
0 0 192.168.1.2:58064 46.29.160.21:http
0 0 192.168.1.2:60961 64.233.164.138:https
0 0 192.168.1.2:55581 173.194.71.189:https
0 0 192.168.1.2:50873 173.194.222.188:https
0 0 127.0.0.1:42245 127.0.0.1:nut

Або сокети в стані очікування:

$ Sudo ss -t4 state time-wait
0 0 127.0.0.1:43541 127.0.0.1:2633

У параметр state можна передати одне з наступних значень:

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • closing
  • all - їхні капітали
  • connected - все крім прослуховує і закритих
  • synchronized - все крім syn-sent
  • bucket - time-wait і syn-recv
  • big - все крім bucket

Не всі статус з`єднання можна побачити просто виконавши команду. Наприклад, syn-sent і syn-recv навряд чи вийде зловити, тому що з`єднання знаходяться в цьому стані дуже короткий час. Для їх відображення зручно використовувати команду watch:

Відео: Ubuntu, Sweeper проста утиліта очищення

$ Watch -n 1 "ss -t4 state syn-sent"
0 1 192.168.1.3:46088 88.212.202.4:http
0 1 192.168.1.3:46087 88.212.202.4:http

Після запуску команди відкрийте будь-який сайт в браузері. Ви побачите як з`явиться одне або декілька з`єднань на кілька секунд.

Фільтрація за адресою і номером порту

Крім фільтрації станом, tcp сокети можна фільтрувати за адресами або портам з`єднань.

Наприклад, відберемо всі мережеві підключення linux з портом джерелом або приймачем ssh, тобто всі вхідні і вихідні з`єднання ssh:

$ Ss -at `(dport =: ssh or sport =: ssh)`
LISTEN 0 128 *: ssh *: *
LISTEN 0 128 ::: ssh ::: *

Або сокети з портом призначення 80 або 443:

$ Ss -nt `(dst: 443 or dst: 80)`
ESTAB 0 0 192.168.1.2:58844 199.59.148.82:443
ESTAB 0 0 192.168.1.2:55320 165.193.246.23:443
ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80
ESTAB 0 0 192.168.1.2:54889 192.241.177.148:443
ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80
ESTAB 0 0 192.168.1.2:33440 38.127.167.38:443

Такий синтаксис теж буде працювати:

$ Ss -nt dst: 443 or dst: 80

Ще кілька прикладів фільтрації:

Фільтрація за адресою:

$ Ss -nt dst 74.125.236.178/16

І за адресою і порту:

$ Ss -nt dport =: 80
ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80
ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80
ESTAB 0 0 192.168.1.2:55043 74.125.236.178:80

Можна використовувати такі оператори порівняння:

  • lt; = "" або le - менше або рівно порту
  • > = "" Або ge - більше або рівно порту
  • = "=" Або eq - точна відповідність
  • != "" Або ne - не дорівнює
  • lt; або gt - менше
  • > Або lt - більше

висновки

От і все. Основну інформацію про те, як виконувати моніторинг мережі в Linux за допомогою утиліти ss розглянули. Якщо вам потрібна додаткова інформація і прикладів дивіться документацію по утилітам набору iproute.

>
Поділися в соціальних мережах:

Схожі
Дізнаємося хто використовує мережу в linuxДізнаємося хто використовує мережу в linux
Використання оперативної пам`яті в linuxВикористання оперативної пам`яті в linux
Як приховати процес в linuxЯк приховати процес в linux
Віртуальна флешка в linuxВіртуальна флешка в linux
Утиліта ip linuxУтиліта ip linux
Opera для linuxOpera для linux
Як дізнатися мережеву карту в linuxЯк дізнатися мережеву карту в linux
Як подивитися користувачів ubuntuЯк подивитися користувачів ubuntu
Команда traceroute linuxКоманда traceroute linux
Корисні утиліти для linuxКорисні утиліти для linux
» » Утиліта ss в linux