Операционные системы

Команда Netcat в Linux

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:
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, которая извлечет архив:
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. Рекомендуется закрепить данную теорию на практике. Если будут вопросы по утилите, тогда обязательно пишите в комментариях.
Linux