Иногда нужно быстро проверить доступные TCP-порты, а
nmap, nc и других привычных утилит на сервере нет.Если установлен Bash, можно использовать встроенный механизм
/
dev/tcp:for port in {20..1024}; do
(echo > /dev/tcp/127.0.0.1/$port) >/dev/null 2>&1 \
&& echo "Порт $port открыт"
doneСкрипт проверяет порты с 20-го по 1024-й на локальной машине.
⚙Как это работает:
🟡Bash пытается установить TCP-соединение с указанным адресом и портом;
🟡если подключение прошло успешно, команда завершается с кодом
0;🟡после
&& выводится сообщение об открытом порте;🟡ошибки и лишний вывод отправляются в
/dev/null.Вместо
127.0.0.1 можно указать IP-адрес другого сервера:host="192.168.1.10"
for port in {20..1024}; do
(echo > /dev/tcp/$host/$port) >/dev/null 2>&1 \
&& echo "$host:$port открыт"
done
Но есть нюанс: если порт фильтруется межсетевым экраном, попытка подключения может надолго зависнуть.
Поэтому лучше добавить ограничение по времени:
host="192.168.1.10"
for port in {20..1024}; do
timeout 0.3 bash -c "echo > /dev/tcp/$host/$port" \
2>/dev/null && echo "$host:$port открыт"
done
💡
/dev/tcp — это не настоящий каталог в файловой системе, а специальная возможность Bash. В sh, dash и некоторых других оболочках этот способ работать не будет.Конечно, такой скрипт не заменит полноценный
nmap: он не определяет сервисы и их версии, не поддерживает разные типы сканирования и последовательно проверяет каждый порт.Но когда нужно быстро проверить порт, а дополнительных инструментов нет, — отличный Linux-трюк.
Telegram 😍
Tg чат 🌐
YouTube 🌐
VK 🌐
Rutube 📺
#bash #linux #sysadmin
