Gymterview
junior

Как проверить прослушиваемые порты и доступность сервисов?

Проверка прослушиваемых портов — это способ убедиться, что сервис запущен, слушает на ожидаемом адресе и доступен по сети.

Проверка прослушиваемых портов

Пример
# Все TCP-порты в состоянии LISTEN с именами процессов
sudo ss -tlnp

# Пример вывода:
# State   Recv-Q  Send-Q  Local Address:Port  Process
# LISTEN  0       128     0.0.0.0:22           users:(("sshd",pid=1234))
# LISTEN  0       100     0.0.0.0:8080         users:(("java",pid=5678))
# LISTEN  0       128     127.0.0.1:5432       users:(("postgres",pid=910))

# UDP-порты
sudo ss -ulnp

# Какой процесс занимает порт 8080
sudo lsof -i :8080

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

Пример
# Проверка TCP-порта с помощью nc (netcat)
nc -zv app-server.mybank.local 8080

# Таймаут 3 секунды
nc -zv -w 3 db-master.mybank.local 5432

# Проверка через /dev/tcp (bash built-in)
echo > /dev/tcp/app-server.mybank.local/8080 && echo "Порт открыт" || echo "Порт закрыт"

Сканирование портов с помощью nmap

Пример
# Сканирование конкретных портов
nmap -p 22,80,443,8080,5432 app-server.mybank.local

# Определение сервисов и версий
nmap -sV -p 22,8080,5432 app-server.mybank.local

# Быстрое сканирование подсети
nmap -sn 192.168.1.0/24

Важно для Java-разработчика

При запуске Spring Boot приложения полезно проверять:

Пример
# Убедиться, что приложение слушает нужный порт
ss -tlnp | grep 8080

# Проверить, что приложение привязано к правильному адресу
# 0.0.0.0:8080 — слушает на всех интерфейсах
# 127.0.0.1:8080 — только локально (не доступно извне!)

В Spring Boot это настраивается через:

Пример
server.address=0.0.0.0
server.port=8080

На собеседовании: ключевая пара команд — ss -tlnp для локальных портов и nc -zv для удалённой проверки. Частая ошибка — не понимать разницу между 0.0.0.0 и 127.0.0.1 при привязке порта.