> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/network/nc-command-guide.md](https://docs.f3cloud.com/ru/network/nc-command-guide.md).

# Команда nc (netcat) в Linux – проверка портов, передача файлов и отладка сети

Команда nc (netcat) в Linux на практике. Проверка TCP- и UDP-портов, передача сообщений и файлов между серверами, временный веб-сервер для проверки порта, разбор ответов и подводные камни. Все примеры проверены на Debian 12.

**nc**, или **netcat**, – маленькая утилита, которая умеет открывать сетевые соединения и принимать их. Её часто называют «швейцарским ножом» для сети, потому что одной командой можно проверить, открыт ли порт, передать файл на другой сервер или убедиться, что брандмауэр пропускает подключения. В этой статье разберём самые полезные приёмы на реальных примерах. Все команды мы проверили на тестовом сервере с Debian 12 и **netcat-openbsd 1.219**.

***

## Как работает nc

Любая программа, которая общается по сети, делает одно из двух. Она либо подключается к другому компьютеру по адресу и порту, как браузер к сайту, либо ждёт подключений на своём порту, как веб-сервер. nc умеет и то и другое, но ничего не добавляет от себя. Всё, что вы введёте с клавиатуры или передадите через `|`, он отправит в сеть как есть, а всё, что придёт из сети, выведет на экран. Именно поэтому с его помощью удобно проверять и отлаживать сетевые сервисы, ведь вы видите обмен без посредников.

Важно помнить, что версий nc несколько, и ключи у них немного различаются. В Debian и Ubuntu по умолчанию ставится **netcat-openbsd**, на неё и рассчитаны примеры ниже. Если команды `nc` нет, установите её.

```bash
# 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.

```bash
# Проверяем порт 443 на сервере 1.1.1.1
nc -zv -w 3 1.1.1.1 443
```

Ответ бывает трёх видов, и каждый говорит о своём.

```text
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-порты, но результат легко понять неправильно.

```bash
nc -zvu -w 2 1.1.1.1 9999
```

```text
Connection to 1.1.1.1 9999 port [udp/*] succeeded!
```

На этом порту у 1.1.1.1 ничего не работает, а nc всё равно пишет **succeeded**. Дело в том, что UDP не устанавливает соединение, и nc считает проверку успешной, если ему никто не ответил отказом. Поэтому для UDP-сервисов, например WireGuard или AmneziaWG, такая проверка мало что доказывает. Надёжнее смотреть на сам сервис, например командой `ss -lnup` на сервере.

***

## 3. Передайте сообщение между серверами

На первом сервере включите ожидание подключений на любом свободном порту.

```bash
# Ждём подключения на порту 12345
nc -l 12345
```

На втором сервере подключитесь к первому и отправьте строку.

```bash
# Отправляем сообщение и закрываем соединение
echo "привет с другого сервера" | nc -N IP_первого_сервера 12345
```

Сообщение появится в окне первого сервера. Если вместо `echo` просто выполнить `nc IP 12345`, получится простой чат, всё, что вы напечатаете на одном сервере, появится на другом. Не забудьте открыть порт в брандмауэре первого сервера, если он включён.

***

## 4. Передайте файл

Тот же приём работает и для файлов. На принимающем сервере запустите приём.

```bash
# Принимаем данные на порту 12346 и записываем в файл
nc -l 12346 > backup.tar.gz
```

На отправляющем сервере отправьте файл.

```bash
# Отправляем файл и закрываем соединение по окончании
nc -N IP_принимающего_сервера 12346 < backup.tar.gz
```

После передачи сравните контрольные суммы на обоих серверах командой `sha256sum backup.tar.gz`, они должны совпасть. На тестовом сервере файл в 2 МБ дошёл без единой ошибки, суммы совпали.

> **nc не шифрует данные.**
>
> Всё, что передаётся через nc, идёт по сети открытым текстом. Для файлов с паролями, ключами и базами данных используйте `scp` или `rsync` поверх SSH.

***

## 5. Поднимите временный веб-сервер

Иногда нужно проверить, доходит ли трафик до сервера на нужный порт, ещё до того, как установлено само приложение. nc может ответить на один запрос браузера.

```bash
# Отвечаем на один 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 позволяет отправить запрос вручную и увидеть, что отвечает сервис. Например, так можно узнать заголовки сайта.

```bash
# Запрашиваем заголовки сайта по HTTP
printf 'HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n' | nc -w 5 example.com 80
```

```text
HTTP/1.1 200 OK
Date: Tue, 20 Oct 2026 19:44:21 GMT
Content-Type: text/html; charset=utf-8
```

Тем же способом можно посмотреть приветствие почтового сервера на порту 25 или SSH-сервера на порту 22.

***

## Частые вопросы

<details>

<summary>Команда nc не найдена</summary>

Установите её. В Debian и Ubuntu это `apt install -y netcat-openbsd`, в AlmaLinux и Rocky Linux это `dnf install -y nmap-ncat`.

</details>

<details>

<summary>Ключ из инструкции в интернете не работает</summary>

Скорее всего, инструкция написана для другой версии nc. Например, в старой версии netcat-traditional порт для ожидания указывают через `-l -p 12345`, а в netcat-openbsd просто `-l 12345`. Список ключей вашей версии покажет команда `nc -h`.

</details>

<details>

<summary>Передача файла не заканчивается</summary>

На отправляющей стороне не хватает ключа `-N`. Без него nc не закрывает соединение после отправки файла. Остановите передачу сочетанием <kbd>Ctrl</kbd> + <kbd>C</kbd> и повторите с `-N`, а затем сверьте контрольные суммы.

</details>

<details>

<summary>Порт открыт в nc, но приложение не подключается</summary>

nc проверяет только то, что порт принимает соединения. Если приложение всё равно не подключается, проблема в его настройках или протоколе. Посмотрите журнал приложения и [трассировку до сервера](https://docs.f3cloud.com/ru/vps/network-troubleshooting-traceroute.md), если подозреваете сеть.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
