Утиліта 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: Portu_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 tcpESTAB 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:
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 ми нічого не побачимо:
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:
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 працювати буде швидше:
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 ::: 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 -tl4LISTEN 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:
LISTEN 0 0 ::: microsoft-ds ::: *
LISTEN 0 0 ::: netbios-ssn ::: *
LISTEN 0 0 ::: ssh ::: *
Фільтрація за станом з`єднання
У синтаксисі команди ми описали два додаткові параметри. Фільтрація стану і фільтрація за адресою. Розглянемо тепер як ними користуватися. Сокет TCP може перебувати в одному з декількох станів. Наприклад, так утиліта ss linux виведе тільки підключення сокети.
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
Або сокети в стані очікування:
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 проста утиліта очищення
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:
LISTEN 0 128 *: ssh *: *
LISTEN 0 128 ::: ssh ::: *
Або сокети з портом призначення 80 або 443:
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 74.125.236.178/16І за адресою і порту:
$ Ss -nt dport =: 80ESTAB 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
- Як подивитися користувачів ubuntu
- Як дізнатися версію linux mint
- Як дізнатися мережеву карту в linux
- Віртуальна флешка в linux
- Реліз linux kernel 4.8 rc3
- Дізнаємося хто використовує мережу в linux
- Лінус торвальдс повідомив про перший релізі linux 4.6 rc1
- Відбувся реліз linux mint 17.3 xfce і kde edition
- Утиліта ip linux
- Команда ping в linux
- Практикум: модулі ядра linux
- Використання оперативної пам`яті в linux
- Корисні утиліти для linux
- Моніторинг мережі linux
- Opera для linux
- Lfs - linux from scratch
- Продуктивність ядра linux 4.8 vs 4.4
- Команда ifconfig - приклади використання