Ответ
Netcat (nc) — это мой основной инструмент для быстрой отладки сетевых проблем, когда более специализированные утилиты (curl, telnet) недоступны или их функционала недостаточно.
Конкретные сценарии использования в работе DevOps/SRE:
-
Быстрая проверка доступности и фильтрации портов:
# Проверка, открыт ли порт 5432 на конкретном хосте (часто используется для проверки доступа к БД с jump-хоста) nc -zv db-host.internal 5432 # Проверка диапазона портов for port in {80..85}; do nc -zv example.com $port 2>&1 | grep succeeded; done -
Диагностика проблем с сетевыми политиками (NetworkPolicies) в Kubernetes: Запускал
ncв поде в качестве временного TCP-сервера, чтобы проверить, может ли другой под или внешний сервис до него достучаться, прежде чем разбираться с деталями политик или service mesh.# В одном поде (например, app-pod): kubectl exec -it app-pod -- nc -l -p 8080 # В другом поде или с локальной машины (через port-forward): nc -zv <pod-ip> 8080 -
Передача файлов или дампов трафика в условиях ограничений:
# На принимающей стороне (например, на своей машине для сбора логов) nc -l -p 9999 > application.log # На отправляющей стороне (на сервере, где нет scp/sftp) cat /var/log/app/error.log | nc my-laptop-ip 9999 -
Тестирование raw-запросов к сетевым сервисам:
# Проверка ответа Redis echo "PINGrn" | nc redis-host 6379 # Проверка ответа мемкэша на stats echo "statsrn" | nc memcached-host 11211
Важные нюансы и безопасность:
- В продактивных средах я предпочитаю использовать
ncat(изnmap), который поддерживает SSL (--ssl) и более гибкие возможности. - Netcat не имеет аутентификации или шифрования, поэтому для передачи чувствительных данных он не подходит. В таких случаях использую
sshили временныйsocatс SSL. - Понимание, что разные версии
nc(BSD vs GNU) могут иметь разные флаги, важно для написания переносимых скриптов. Всегда проверяюman ncна конкретной системе.