Команда nc (netcat) и примеры её использования

Команда nc (netcat) и примеры её использования

Команда Netcat (nc) — это утилита командной строки, предназначенная для чтения и записи данных, переданных между двумя компьютерами в сети. Связь осуществляется с использованием протоколов TCP или UDP, используется как IPv4, так и IPv6, с помощью команды можно отправлять пакеты, сканировать и прослушивать произвольные порты. Команда отличается в зависимости от операционной системы (netcat, nc, ncat и другие).

Netcat будет полезен сетевым и системным администраторам благодаря широким возможностям устранения неполадок подключения и удобным скриптам.

Рассказываем, как использовать команду nc (в версии netcat-openbsd) и приводим примеры её применения. 

Предварительные условия

Nc корректно работает при наличии следующих условий:

  • Две машины в одной сети; у нас — две виртуальные машины с Ubuntu 18.04.
  • Доступ к терминалу на обоих устройствах.
  • IP-адрес каждого устройства.
  • Доступ к браузеру или команде curl.

Виртуальные машины: зачем нужны и как пользоваться

Синтаксис команды nc

Основной синтаксис команды nc:

nc <options> <host> <port>

В Ubuntu применяют два варианта команды — nc и netcat; в CentOS, Debian и RHEL используйте ncat.

Команда включает следующие элементы:

  • <options> — дополнительные параметры,
  • <host> — IP-адрес или символическое имя хоста,
  • <port> — номер порта или имя службы.

Команда запускает TCP-соединение на указанном хосте и порту даже без дополнительных параметров.

Режимы работы

Netcat имеет два режима работы:

  • Подключение. В этом режиме Netcat работает как клиент, для работы утилиты требуются <host> и <port>.
  • Прослушивание. В режиме прослушивания Netcat работает как сервер. Если <host> не задан, Netcat прослушивает все доступные адреса для указанного порта.

Опции команды nc

В таблице ниже приведены некоторые параметры команды nc:

-4Использовать только IPv4; опцию можно не указывать, так как IPv4 применяется по умолчанию.
-6Только IPv6.
-U—unixsockИспользовать доменные сокеты Unix.
-u—udpИспользовать UDP-соединение. 
-g <hop1, hop2,…>В режиме подключения: установить переходы для свободной маршрутизации источника в IPv4. hop1, hop2 и т. д. — это IP-адреса или имена хостов.
-p <port>—source-port <port>В режиме подключения: назначить исходный порт Netcat как <port>. 
-s <host>—source <host>В режиме подключения: привязать хост Netcat к <host>.
-l—listenПереход в режим прослушивания. 
-k—keep-openВ режиме прослушивания: держать соединение открытым для нескольких одновременных подключений. 
-v—verboseВыводит информацию о подключении, используйте несколько раз для увеличения детализации.
-zСообщает о состоянии соединения без его установки.

Это далеко не все доступные опции; полный список находится на странице руководства к утилите. Для вызова мануала используйте команду man:

man netcat

Примеры использования команды nc

В примерах мы используем две виртуальные машины с уникальными IP-адресами. Первая имеет IP 10.0.2.4, и вторая — IP 10.0.2.5. Обозначим их как ВМ1 и ВМ2.

Клиент-серверное соединение

Создадим простое клиент-серверное соединение между двумя устройствами, одно из которых действует как сервер (слушает), а другое действует как клиент (подключается).

  1. На ВМ1 выполните nc-команду в режиме прослушивания и укажите порт:
nc -lv 1234
Пример командной строки

Опция -l активирует режим прослушивания, делая сервером ВМ1. А -v инициирует вывод состояния.

  1. На ВМ2 выполните nc-команду с IP-адресом и портом сервера:
nc -v 10.0.2.4 1234
Пример командной строки: nc-команду с IP-адресом и портом сервера

Благодаря -v мы видим, что соединение успешно установлено. Серверное устройство подтверждает соединение и выводит IP-адрес клиента.

Пример командной строки: соединение успешно установлено

  1. Отправьте сообщение с любого устройства, и то же самое сообщение появится на другом устройстве. Клиент и сервер ведут себя одинаково после установления соединения.

Чтобы завершить соединение, нажмите CTRL+C на любом компьютере.


Выбирайте для своих веб-проектов надёжного провайдера. Например, аренда VPS от AdminVPS — это:

  • бесплатное администрирование,
  • NVMe-диски,
  • быстрая техподдержка,
  • защита от DDoS-атак,
  • доступная цена.

Пинг-тест определённого порта на веб-сайте

Утилиту Netcat можно использовать как альтернативу команде ping для проверки доступности определённого порта на сайте. Например:

nc -zv adminvps.ru 443
  • -v показывает сообщение о результате проверки;
  • -z гарантирует, что подключение не будет сохраняться — будет проведена только проверка.

Недостатком является отсутствие конкретной информации, поэтому для пингования лучше выбирать другие методы.

Команда «пинг»: для чего нужна и как пингуют серверы

Сканирование портов

Команда nc для сканирования открытых портов.

  1. Для прослушивания порта 1234 введите на устройстве-сервере:
nc -lkv 1234
Пример командной строки: прослушивание порта

-k означает, что соединение останется открытым после разрыва.

  1. Выполните на устройстве-клиенте, чтобы проверить, открыт ли порт 1234:
nc -zv 10.0.2.4 1234
Пример командной строки: как проверить, открыт ли порт

Если порт открыт, отобразится сообщение об успешном подключении.

  1. Вместо номера одного порта можно указать диапазон:
nc -zv 10.0.2.4 1230-1235

Вывод покажет данные по каждому порту:

Пример командной строки: данные по каждому порту

  1. При сканировании диапазона отфильтруйте результаты, чтобы увидеть открытые порты:
nc -zv 10.0.2.4 1230-1235 2>&1 | grep 'succeeded'
Пример командной строки: отфильтруйте результаты

Передача файла

Утилита Netcat позволяет передавать файлы через установленные соединения.

  1. На ВМ1 мы создали пустой тестовый файл:
touch file.txt

Затем активировали режим прослушки и указали, что отправляем созданный файл:

nc -lv 1234 < file.txt
Пример командной строки: отправляем созданный файл

  1. На ВМ2 подключились к серверу и указали, что получаем файл:
nc -zv 10.0.2.4 1234 > file.txt

С помощью команды ls подтвердили, что передача файла завершена.

Пример командной строки: передача файла завершена

Передача каталога

Чтобы передать несколько файлов или каталогов, используйте команду tar и передайте её Netcat.

  1. Перейдите в каталог, который нужно отправить, с помощью команды cd (в примере папка files, содержащая 5 файлов):
cd files
  1. На принимающем устройстве создайте целевой каталог и войдите в него:
mkdir files_destination && cd files_destination

Создайте соединение, прослушивающее порт 1234, и передайте команду tar:

nc -lv 1234 | tar xfv -
Пример командной строки: создайте соединение

Теперь прослушивающее соединение ожидает файл, который извлечёт tar.

  1. Отправьте каталог на отдающей машине:
tar -cf - . | nc -v 10.0.2.5 1234
Пример командной строки: отправьте каталог

  1. Файлы приняты и передача завершается:
Пример командной строки: передача завершается

Создание веб-сервера с помощью nc

  1. Запустите прослушку порта 1234 на сервере:
nc -lv 10.0.2.4 1234
Пример командной строки: запустите прослушку порта

Если не указать адрес, веб-сервер будет запущен на локальном хосте.

  1. На ВМ2 (клиент) подключитесь по адресу и порту в браузере. Либо введите в терминале:
curl 10.0.2.4:1234
  1. На веб-сервере отобразится запрос, отправленный curl или браузером с информацией о нём (типом, хостом и пользовательским агентом):
Пример командной строки: так отобразится запрос

Чтобы отправить ответ клиенту, вставьте следующий код:

HTTP/1.1 200 Everything OK
Server: netcat
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<title>
Netcat
</title>
</head>
<body>
<h1>A webpage served with nc</h1>
</body>
</html>
Пример командной строки: код

  1. Обновление информации на экране клиента произойдёт немедленно. При подключении через терминал:
Пример командной строки: обновление информации

При доступе через браузер:

Результат в браузере

Веб-сервер успешно запущен. Выключите его с помощью сочетания клавиш CTRL+C.

Читайте в блоге:

Что будем искать? Например,VPS-сервер

Мы в социальных сетях