Введение
В данной статье мы узнаем как работать с утилитой Netcat в операционной системе Linux. Утилита позволяет устанавливать и тестировать TCP и UDP соединения на нашем сервере. Netcat имеет отличный функционал и поставляется практически с любым Linux-дистрибутивом, поэтому нет необходимости ставить стороннее обеспечение.
Обзор и основные возможности Netcat
Начнем с определения. Netcat – это сетевая утилита, предназначенная для исследования и отладки сети. Netcat позволяет создавать соединения TCP или UDP и обмениваться данными через них. Утилита имеет ряд полезных встроенных возможностей. Основной функционал Netcat:
- реализация простейшего TCP прокси-сервера (путем перенаправления портов)
- сканирование портов
- обмен данными через TCP/UDP
- прослушивание порта
- использование в качестве простейшего web-сервера
Как работать с утилитой Netcat
Утилита в Linux вызывается при помощи ввода в терминале netcat или nc.
Общий синтаксис Netcat такой:
netcat [options] host port
Запуск без опций устанавливает TCP-соединение с удаленным хостом на указанный порт. Заметим, что данное применение Netcat полностью аналогично хорошо знакомой утилите Telnet.
Если нам необходимо вместо установки TCP-соединения отправить UDP-пакет на удаленный хост вводим:
netcat -u host port
Для диапазона портов (например, с 2100-2150) используем синтаксис:
netcat host 2100-2150
К примеру, это применение будет полезно для тестирования корректности правил межсетевых экранов.
Использование Netcat в качестве сканера портов
Простейшее сканирование портов достигается в Netcat путем указания диапазона портов (как мы разобрали выше) и указанием ключей:
- -z – сканирование порта, вместо инициализации соединения
- -v – более подробный вывод работы утилиты в терминал
Например, просканируем все порты нашего сервера в диапазоне от 100 до 500.
netcat -z -v myruvds_server.ru 100-500
Заметим, что сканирование идет намного быстрей, если вместо доменного имени указать ip-адрес сервера. Для этого нам необходимо добавить ключ -n, который указывает утилите не разрешать DNS-имена.
netcat -zvn 192.168.16.250 100-500
Немного модифицируем эту команду, перенаправив сообщения об ошибках на стандартный вывод, используя конструкцию bash 2>&1. После соберем сообщения только по открытым портам:
netcat -zvn 192.168.16.250 100-500 2>&1 | grep succeeded
Создание соединения по схеме “клиент-сервер”
Поскольку помимо установки TCP и UDP соединений Netcat позволяет прослушивать порты, мы можем использовать эту утилиту для организации сетевого взаимодействия по схеме “клиент-сервер”.
Определимся какой хост у нас будет выступать в роли сервера. Допустим это myruvds_server.ru. Запустим на нем режим прослушивания порта с помощью команды:
netcat -l 3333
В данном примере мы прослушиваем порт 3333 (обратите внимание, что для прослушивания портов ниже 1000 нам необходимы привилегии sudo).
На втором хосте (выбранном нами в качестве клиента) введем команду:
netcat myruvds_server.ru 3333
Далее мы можем вводить любые сообщения в консоли. После нажатия Enter эти сообщения будут появляется в консоли сервера. Все это будет работать и в обратном направлении.
Передача файлов
Основываясь на примере выше, мы можем использовать установленное соединение не только для передачи сообщений, но и файлов. Для этого используется встроенные возможности утилиты и оболочки Bash. Рассмотрим на примере.
Введем на первом хосте (myruvds_server.ru) команду для прослушивания порта 3333, но при этом используя перенаправление потока вывода не в консоль, а в файл rec_file.
netcat -l 3333 > rec_file
На втором хосте создадим файл send_file. Поместим в него произвольные текстовые данные:
echo "Hi! I am Test" > send_file
Далее отправим этот файл на первый хост:
netcat myruvds_server.ru 3333 < original_file
На первом хосте проверяем файл rec_file и видим записанное в него содержимое передаваемого файла:
cat rec_file
output
Hi! I am Test
Ну и второй более сложный пример. Необходимо поместить в архив содержимое текущего каталога на одном из хостов, с помощью Netcat передать и распаковать его на втором хосте.
На первом хосте начнем прослушивание порта с ожиданием файла, подлежащего разархивированию:
netcat -l 3333 | tar xzvf -
На втором хосте создадим архив, и при помощи конвейера передадим результат в Netcat.
tar -czf - * | netcat myruvds_server.ru 3333
Далее убеждаемся, что данные корректно переданы и распакованы.
Заключение
В этой статье мы рассмотрели лишь несколько примеров практического использования утилиты Netcat. Как видим, это простой и удобный инструмент для решения сетевых задач базового уровня на серверах Linux.