nc, или netcat, – маленькая утилита, которая умеет открывать сетевые соединения и принимать их. Её часто называют «швейцарским ножом» для сети, потому что одной командой можно проверить, открыт ли порт, передать файл на другой сервер или убедиться, что брандмауэр пропускает подключения. В этой статье разберём самые полезные приёмы на реальных примерах. Все команды мы проверили на тестовом сервере с Debian 12 и netcat-openbsd 1.219.
Как работает nc
Любая программа, которая общается по сети, делает одно из двух. Она либо подключается к другому компьютеру по адресу и порту, как браузер к сайту, либо ждёт подключений на своём порту, как веб-сервер. nc умеет и то и другое, но ничего не добавляет от себя. Всё, что вы введёте с клавиатуры или передадите через |, он отправит в сеть как есть, а всё, что придёт из сети, выведет на экран. Именно поэтому с его помощью удобно проверять и отлаживать сетевые сервисы, ведь вы видите обмен без посредников.
Важно помнить, что версий nc несколько, и ключи у них немного различаются. В Debian и Ubuntu по умолчанию ставится netcat-openbsd, на неё и рассчитаны примеры ниже. Если команды nc нет, установите её.
# Debian и Ubuntu
apt update && apt install -y netcat-openbsd
# AlmaLinux и Rocky Linux, здесь nc входит в пакет nmap-ncat
dnf install -y nmap-ncatОсновные ключи
-zпроверяет порт без передачи данных.-vвыводит подробности, без него nc при проверке молчит.-w 3ждёт ответа не дольше 3 секунд.-uпереключает nc на UDP, по умолчанию он работает по TCP.-lвключает режим ожидания подключений на указанном порту.-Nзакрывает соединение, когда закончились входные данные. Без него отправка файла может не завершиться.-kне закрывает порт после первого подключения и ждёт следующих.
1. Проверьте, открыт ли порт
Это самое частое применение nc. Например, так можно проверить, доступен ли сайт, почтовый сервер или порт VPN.
# Проверяем порт 443 на сервере 1.1.1.1
nc -zv -w 3 1.1.1.1 443Ответ бывает трёх видов, и каждый говорит о своём.
Connection to 1.1.1.1 443 port [tcp/https] succeeded!
nc: connect to 127.0.0.1 port 8081 (tcp) failed: Connection refused
nc: connect to 1.1.1.1 port 81 (tcp) timed out: Operation now in progress- succeeded значит, что порт открыт и на нём кто-то отвечает.
- Connection refused значит, что сервер доступен, но на этом порту ничего не запущено.
- timed out значит, что ответа нет совсем. Чаще всего порт закрыт брандмауэром, или пакеты режутся где-то по пути.
Можно проверить сразу несколько портов подряд, указав диапазон, например nc -zv -w 2 1.1.1.1 79-81.
2. Проверка UDP и почему ей нельзя верить
С ключом -u nc проверяет UDP-порты, но результат легко понять неправильно.
nc -zvu -w 2 1.1.1.1 9999Connection to 1.1.1.1 9999 port [udp/*] succeeded!На этом порту у 1.1.1.1 ничего не работает, а nc всё равно пишет succeeded. Дело в том, что UDP не устанавливает соединение, и nc считает проверку успешной, если ему никто не ответил отказом. Поэтому для UDP-сервисов, например WireGuard или AmneziaWG, такая проверка мало что доказывает. Надёжнее смотреть на сам сервис, например командой ss -lnup на сервере.
3. Передайте сообщение между серверами
На первом сервере включите ожидание подключений на любом свободном порту.
# Ждём подключения на порту 12345
nc -l 12345На втором сервере подключитесь к первому и отправьте строку.
# Отправляем сообщение и закрываем соединение
echo "привет с другого сервера" | nc -N IP_первого_сервера 12345Сообщение появится в окне первого сервера. Если вместо echo просто выполнить nc IP 12345, получится простой чат, всё, что вы напечатаете на одном сервере, появится на другом. Не забудьте открыть порт в брандмауэре первого сервера, если он включён.
4. Передайте файл
Тот же приём работает и для файлов. На принимающем сервере запустите приём.
# Принимаем данные на порту 12346 и записываем в файл
nc -l 12346 > backup.tar.gzНа отправляющем сервере отправьте файл.
# Отправляем файл и закрываем соединение по окончании
nc -N IP_принимающего_сервера 12346 < backup.tar.gzПосле передачи сравните контрольные суммы на обоих серверах командой sha256sum backup.tar.gz, они должны совпасть. На тестовом сервере файл в 2 МБ дошёл без единой ошибки, суммы совпали.
nc не шифрует данные
Всё, что передаётся через nc, идёт по сети открытым текстом. Для файлов с паролями, ключами и базами данных используйте scp или rsync поверх SSH.
5. Поднимите временный веб-сервер
Иногда нужно проверить, доходит ли трафик до сервера на нужный порт, ещё до того, как установлено само приложение. nc может ответить на один запрос браузера.
# Отвечаем на один HTTP-запрос на порту 8080
printf 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from nc\n' | nc -l -N 8080Откройте в браузере http://IP_сервера:8080, и вы увидите строку Hello from nc. А в терминале сервера nc покажет сам запрос браузера, с заголовками GET / HTTP/1.1, Host и User-Agent. Если страница не открывается, порт закрыт брандмауэром сервера или по пути.
6. Посмотрите ответ сервера
nc позволяет отправить запрос вручную и увидеть, что отвечает сервис. Например, так можно узнать заголовки сайта.
# Запрашиваем заголовки сайта по HTTP
printf 'HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n' | nc -w 5 example.com 80HTTP/1.1 200 OK
Date: Tue, 20 Oct 2026 19:44:21 GMT
Content-Type: text/html; charset=utf-8Тем же способом можно посмотреть приветствие почтового сервера на порту 25 или SSH-сервера на порту 22.
Частые вопросы
Команда nc не найдена
Установите её. В Debian и Ubuntu это apt install -y netcat-openbsd, в AlmaLinux и Rocky Linux это dnf install -y nmap-ncat.
Ключ из инструкции в интернете не работает
Скорее всего, инструкция написана для другой версии nc. Например, в старой версии netcat-traditional порт для ожидания указывают через -l -p 12345, а в netcat-openbsd просто -l 12345. Список ключей вашей версии покажет команда nc -h.
Передача файла не заканчивается
На отправляющей стороне не хватает ключа -N. Без него nc не закрывает соединение после отправки файла. Остановите передачу сочетанием Ctrl + C и повторите с -N, а затем сверьте контрольные суммы.
Порт открыт в nc, но приложение не подключается
nc проверяет только то, что порт принимает соединения. Если приложение всё равно не подключается, проблема в его настройках или протоколе. Посмотрите журнал приложения и трассировку до сервера, если подозреваете сеть.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Официальный сайт: https://f3cloud.com