linux-labs

Вики / Сеть

nc (netcat) — проверка портов

Команда netcat (openbsd/ncat) СетьТраблшутинг

Проверка доступности портов, простой обмен данными по TCP/UDP.

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

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

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

Ключ Значение
-z scan-режим: только проверить, не слать данные
-v подробный вывод (refused / open / timed out)
-u UDP вместо TCP
-l слушать (режим сервера)
-p N локальный порт
-w N таймаут соединения, секунд
-n без DNS-резолва (быстрее)
-k -l) не закрываться после клиента
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 — не дошли (файрвол/маршрут).

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   # клиент

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

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

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

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

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

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

nc «висит»

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

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 >f  /  nc host 9000 <f # передать файл