С чего начать Первые шаги трек · 15 ступеней
Linux Labs

nc — проверка портов и передача данных

4 мин netcat (openbsd/ncat)

nc (netcat) проверяет доступность портов и передаёт данные по TCP и UDP без лишних программ.

Шпаргалка

6 команд Версия для печати
  • nc -zvw3 host 22 порт открыт? (refused vs timed out)
  • nc -zvu host 53 UDP
  • nc -zv host 20-25 диапазон
  • nc -l 9000 слушать (тест-сервер)
  • echo data | nc host 9000 отправить
  • nc -l 9000 > out.bin принять файл (на другой стороне — nc host 9000 < file.bin)

Обзор

nc (netcat) — «швейцарский нож» TCP/UDP: проверить, открыт ли порт, отправить сырые данные, поднять временный слушатель, перекинуть файл между машинами.

bash
nc -zv host 22                    # проверить, открыт ли порт 22 (z=scan, v=verbose)
nc -zv host 80 443                # несколько портов сразу

В Ubuntu обычно netcat-openbsd (ключи как ниже). Бывает вариант ncat (из nmap) с похожим синтаксисом.

Ключи

8
Ключ Значение
-z scan-режим: только проверить, не слать данные
-v подробный вывод (refused / open / timed out)
-u UDP вместо TCP
-l слушать (режим сервера)
-p N локальный порт
-w N таймаут соединения, секунд
-n без DNS-резолва (быстрее)
-k (с -l) не закрываться после клиента
Ключ Что делает Пример
-z Режим сканирования — только проверить доступность, не слать данные. nc -zv host 22
-v Подробный вывод — refused, open, timed out. nc -zv host 80
-l Слушать входящее соединение (режим сервера). nc -l 9000
-w N Таймаут соединения в секундах — не даёт команде висеть бесконечно. nc -zvw3 host 22
-u Использовать UDP вместо TCP. nc -zvu host 53
-n Не резолвить DNS-имена — быстрее и надёжнее для проверок. nc -zvn 10.0.0.5 22
-p N Использовать конкретный локальный порт. nc -p 5000 host 9000
-k С -l — не закрываться после отключения одного клиента. nc -lk 9000

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Проверка портов

bash
nc -zv 10.0.0.5 5432             # доступен ли postgres-порт с этой машины
nc -zvw3 host 22                 # с таймаутом 3с (не висеть)
nc -zvu host 53                  # UDP-порт (DNS)
nc -zv host 20-25                # диапазон портов
for p in 80 443 5432; do nc -zvw2 host $p; done   # список портов

Различай ответы: succeeded/open — порт слушает; Connection refused — дошли, но никто не слушает; timed out — не дошли (файрвол/маршрут).

Данные и передача

bash
nc -l 9000                        # слушать порт 9000 (простой тест-сервер)
echo "hello" | nc host 9000       # отправить строку
printf 'GET / HTTP/1.0\r\n\r\n' | nc host 80   # сырой HTTP-запрос
nc -lk 9000                       # держать слушатель после отключения клиента

# передать файл (приёмник, затем отправитель):
nc -l 9000 > out.bin              # на приёмнике
nc host 9000 < file.bin           # на отправителе

# простой «чат»/двунаправленный канал для проверки связи:
nc -l 9000        # сервер   |   nc host 9000   # клиент

Неполадки

4

«Доступен ли порт отсюда?»

nc -zvw3 host port. refused ≠ timed out: первое — служба не запущена/не тот порт (сеть в порядке), второе — файрвол/маршрут. Это ключевое различие.

Порт открыт локально, но не снаружи

С сервера nc -zv 127.0.0.1 8080 — слушает ли. Если да, а снаружи timeout — дело в bind-адресе (0.0.0.0 vs 127.0.0.1) или файрволе (см. ss, firewall).

Нужно быстро проверить L4-связность между хостами

nc -l 8080 на одной стороне, nc -zv host 8080 с другой — проходит ли TCP/UDP именно по этому порту (полезно при отладке файрвола).

nc «висит»

Без -w соединение может ждать вечно. Добавляй таймаут -w3 (и -z для чистой проверки без обмена данными).

См. также

  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
  • curl — Запросы HTTP/HTTPS из CLI — отладка API и веб-сервисов, заголовки, методы.
  • tcpdump — Снифферинг пакетов для диагностики — фильтры по хосту, порту, интерфейсу.
Загрузка…