Расскажи про опыт с Netcat

«Расскажи про опыт с Netcat» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Netcat (nc) — это мой основной инструмент для быстрой отладки сетевых проблем, когда более специализированные утилиты (curl, telnet) недоступны или их функционала недостаточно.

Конкретные сценарии использования в работе DevOps/SRE:

  1. Быстрая проверка доступности и фильтрации портов:

    # Проверка, открыт ли порт 5432 на конкретном хосте (часто используется для проверки доступа к БД с jump-хоста)
    nc -zv db-host.internal 5432
    
    # Проверка диапазона портов
    for port in {80..85}; do nc -zv example.com $port 2>&1 | grep succeeded; done
  2. Диагностика проблем с сетевыми политиками (NetworkPolicies) в Kubernetes: Запускал nc в поде в качестве временного TCP-сервера, чтобы проверить, может ли другой под или внешний сервис до него достучаться, прежде чем разбираться с деталями политик или service mesh.

    # В одном поде (например, app-pod):
    kubectl exec -it app-pod -- nc -l -p 8080
    # В другом поде или с локальной машины (через port-forward):
    nc -zv <pod-ip> 8080
  3. Передача файлов или дампов трафика в условиях ограничений:

    # На принимающей стороне (например, на своей машине для сбора логов)
    nc -l -p 9999 > application.log
    # На отправляющей стороне (на сервере, где нет scp/sftp)
    cat /var/log/app/error.log | nc my-laptop-ip 9999
  4. Тестирование 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 на конкретной системе.