Как в Linux проверить, открыт ли порт

«Как в Linux проверить, открыт ли порт» — вопрос из категории Операционные системы, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Существует два основных сценария: проверка, слушает ли порт локальный процесс, и проверка доступности порта на удалённом хосте.

1. Проверка локальных слушающих портов

Эти команды показывают, какие процессы на вашей машине "слушают" порты в ожидании соединений.

  • ss (рекомендуется): Современная и быстрая утилита.

    # Проверить TCP и UDP порты
    ss -tuln | grep :<порт>
    • -t: TCP порты
    • -u: UDP порты
    • -l: Только слушающие сокеты (LISTEN)
    • -n: Отображать числовые адреса и порты
  • lsof: Показывает, какой процесс использует порт.

    # Найти процесс по номеру порта
    sudo lsof -i :<порт>
  • netstat (устаревший): Аналог ss.

    netstat -tuln | grep :<порт>

2. Проверка доступности порта на удалённом хосте

Эти утилиты пытаются установить соединение с портом, чтобы проверить его доступность извне (с учётом файрволов).

  • nc (netcat): Мощный сетевой инструмент.

    # -z: сканировать порты, не отправляя данные
    # -v: подробный вывод
    nc -zv <хост_или_IP> <порт>
  • telnet: Простая утилита для проверки TCP-соединения.

    telnet <хост_или_IP> <порт>

    Если экран станет черным, соединение успешно. Если нет — порт закрыт или заблокирован.

Вывод:

  • Для быстрой проверки локальных портов используйте ss -tuln.
  • Для проверки доступности удаленного порта лучше всего подходит nc -zv.