Netcat (nc) – это утилита командной строки, которая читает и записывает данные через сетевые подключения, используя протоколы TCP или UDP. Это один из самых мощных инструментов в арсенале сетевых и системных администраторов, который считается швейцарским армейским ножом сетевых инструментов.
Netcat можно использовать для отладки и мониторинга сетевых подключений, сканирования открытых портов, передачи данных в качестве прокси-сервера и многого другого. Пакет Netcat предустановлен в MacOS и популярных дистрибутивах Linux.
Синтаксис
Самый основной синтаксис утилиты имеет следующий вид:
nc [options] host port
Опции Netcat
- -h Справка;
- -v Вывод информации о процессе работы (verbose);
- -o <выходной_файл> Вывод данных в файл;
- -i <число> Задержка между отправляемыми данными (в секундах);
- -z Не посылать данные (сканирование портов);
- -u Использовать для подключения UDP протокол;
- -l Режим прослушивания;
- -p <число> Локальный номер порта для прослушивания. Используется с опцией -l;
- -s <хост> Использовать заданный локальный («свой») IP-адрес;
- -n Отключить DNS и поиск номеров портов по /etc/services;
- -w <число> Задать тайм-аут (в секундах);
- -q <число> Задать время ожидания после передачи данных, после истечение которого соединение закрывается.
Установка Netcat
Пример установки утилиты в ОС Debian:
sudo apt-get install netcat
Сканирование портов
Сканирование портов является одним из наиболее распространенных способов использования Netcat. Можно сканировать один порт или диапазон портов.
Например, для поиска открытых портов в диапазоне 1-80 вы должны использовать следующую команду:
nc -z -v 192.168.0.113 1-80
Опция -z скажет nc сканировать только открытые порты, без отправки каких – либо данных на них и -v дает возможность предоставления более подробной информации.
Если необходимо распечатать только строки с открытыми портами, можно отфильтровать результаты с помощью команды grep:
Если необходимо распечатать только строки с открытыми портами, можно отфильтровать результаты с помощью команды grep:
nc -z -v 192.168.0.113 1-80 2>&1 | grep open
Можно использовать Netcat для поиска серверного программного обеспечения и его версии. Например, если отправить команду «EXIT» на сервер по стандартному SSH-порту 22:
echo "EXIT" | nc 192.168.0.113 22
Вывод будет выглядеть примерно так:
SSH-2.0-OpenSSH_7.9p1 Debian-10
Protocol mismatch.
Сохранение результатов
Результаты сканирования можно сохранить в файл. Например, можно сканировать порты 1-80, создать файл и записать в него результаты сканирования:
nc -v 192.168.0.113 1-80 > test.txt
Отправка файлов через Netcat
Netcat можно использовать для передачи данных с одного хоста на другой, создав базовую модель клиент/сервер.
На принимающем ПК запустим следующую команду, которая откроет порт 5555 для входящего соединения и перенаправит вывод в файл:
nc -l 5555 > file_name
С узла-отправителя подключаемся к узлу-получателю и отправляем файл:
nc 192.168.0.113 5555 < file_name
Для передачи каталога можно использовать tar для архивирования каталога на исходном хосте и для извлечения архива на конечном хосте.
На принимающем хосте настраиваем средство Netcat на прослушивание входящего соединения через порт 5555. Входящие данные передаются в команду tar, которая извлечет архив:
На принимающем хосте настраиваем средство Netcat на прослушивание входящего соединения через порт 5555. Входящие данные передаются в команду tar, которая извлечет архив:
nc -l 5555 | tar xzvf -
На отправляющем хосте упаковываем каталог и отправляем данные, подключившись к процессу прослушивания nc на принимающем хосте:
tar czvf - /path/to/dir | nc 192.168.0.113 5555
После завершения вводим CTRL+C, чтобы закрыть соединение.
Чат между узлами
На первом узле (192.168.1.13):
nc -lp 9000
На втором узле:
nc 192.168.1.13 9000
После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.
Выводы
В данной статье мы рассмотрели основы работы и примеры работы утилиты Netcat. Рекомендуется закрепить данную теорию на практике. Если будут вопросы по утилите, тогда обязательно пишите в комментариях.