Ss в Linux: как найти слушающий порт и проверить адрес привязки

Ss в Linux: как найти слушающий порт и проверить адрес привязки
Содержание статьи

Команда ss -ltn показывает слушающие TCP-сокеты с числовыми адресами и портами. По ней можно проверить, создал ли процесс слушающий сокет и на каком адресе. Наличие строки LISTEN не означает, что приложение доступно с другого компьютера или корректно отвечает на HTTP-запросы.

В разборе Mentoring.digital используем только команды чтения. Они не открывают порты, не меняют файрвол и не завершают процессы. Выполнять их нужно на Linux-машине или в соответствующем сетевом пространстве, где вы диагностируете сервис.

Базовая команда и её ключи

ss -ltn
ss -ltnp
  • -l выбирает слушающие сокеты.
  • -t ограничивает вывод TCP.
  • -n оставляет числовые значения без преобразования портов в имена сервисов.
  • -p добавляет доступные сведения о процессах, использующих сокет.

Без -l слушающие TCP-сокеты по умолчанию не показываются. Не делайте вывод «сервис не запущен» только потому, что их нет в обычном выводе ss.

Сведения о чужих процессах могут быть ограничены правами. Пустой столбец процесса не доказывает отсутствие владельца сокета. Если у вас уже есть разрешённые административные права и требуется именно эта информация, команду можно выполнить с ними. Для проверки адреса и порта это обычно отдельный вопрос.

Как проверить конкретный порт

ss -ltnp 'sport = :8080'
ss -4 -ltn 'sport = :8080'
ss -6 -ltn 'sport = :8080'

Фильтр sport выбирает локальный порт сокета. Это точнее простого поиска строки «8080», которая могла бы встретиться в другом поле. Ключи -4 и -6 позволяют отдельно посмотреть IPv4 и IPv6.

Порт 8080 здесь учебный. Замените его фактическим портом сервиса. Пустой вывод означает, что в текущем сетевом пространстве и при выбранных фильтрах подходящих сокетов не найдено. Это ещё не объясняет причину: могли отличаться порт, протокол, окружение или состояние процесса.

Что означает локальный адрес

Смотрите колонку Local Address:Port. Адрес 127.0.0.1:8080 означает привязку к IPv4 loopback. Сокет предназначен для обращений внутри этого сетевого пространства, а не напрямую через внешний интерфейс. Запись 0.0.0.0:8080 означает привязку ко всем локальным IPv4-адресам.

Для IPv6 loopback имеет вид [::1]:8080, а wildcard-адрес может отображаться как [::]:8080. Не считайте IPv6 wildcard автоматическим доказательством поддержки IPv4: это зависит от настроек сокета и системы. Проверьте обе семьи отдельно.

В контейнерной среде адрес относится к конкретному сетевому пространству. Слушающий сокет внутри контейнера и опубликованный порт на хосте являются разными частями маршрута. По одному выводу из контейнера нельзя подтвердить путь внешнего клиента.

Как продолжить диагностику по результату

  1. Сверьте протокол, порт и окружение запуска.
  2. Если сокета нет, проверьте статус процесса и его журнал.
  3. Если адрес только loopback, сопоставьте это с ожидаемой схемой доступа и прокси.
  4. Если сокет есть, отдельно проверьте ответ приложения и доступ с нужной точки сети.

Для UDP используется ss -lun. Не переносите на него ожидание TCP-состояния LISTEN: протоколы устроены по-разному. Также не меняйте правила сети вслепую только потому, что найден открытый сокет.

Практику диагностики можно продолжить на курсах Linux. Если непонятна связка сервиса, контейнера и прокси, полезен разбор с наставником по Linux.

Похожие статьи по данной теме