Вики / Сеть
nc (netcat) — проверка портов
Проверка доступности портов, простой обмен данными по 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. refused ≠ timed 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 # передать файл
См. также
- ss (сокеты и порты) — Сеть
- curl (HTTP из консоли) — Сеть
- tcpdump (захват трафика) — Сеть