Estoy tratando de crear un script para probar si es posible iniciar sesión a través de telnet. No quiero realmente iniciar sesión; por lo tanto, esperar no es necesario. Solo quiero ver si puedo obtener un mensaje de inicio de sesión. Esto se está haciendo desde un sistema Linux, así que he estado tratando de usar nc
:
nc 192.168.10.5 23 -w 1 | grep -q login
if [ $? -eq 1 ]
then
echo "console is down"
fi
El problema es que esto está causando que mi consola se bloquee. Parece que -w
realmente no está cayendo la conexión.
También intenté usar telnet pero no puedo romper la conexión desde el script. Molesto
\echo "\035" | telnet 192.168.10.5
se rompe antes de recibir un mensaje de inicio de sesión.
shell
shell-script
telnet
netcat
rleon
fuente
fuente
Respuestas:
Bash proporciona pseudo dispositivos con los que probablemente esté familiarizado, como
extracto de la página de manual de Bash/dev/null
. Sin embargo, existen otros dispositivos como/dev/tcp
y/dev/udp
para probar las conexiones de red, que también puede usar desde los scripts de Bash.Ejemplo
Aquí estoy probando la conexión a un host en mi dominio llamado skinner y viendo si puedo conectarme a su puerto 22.
NOTA: El puerto 22 es para SSH, para telnet use el puerto 23.
Genial, así que intentemos con un no puerto:
Bueno, eso funciona, pero es una salida muy fea. No es para preocuparse. Puede ejecutarlo
echo > /dev/tcp/...
en una subshell y redirigir toda la salida/dev/null
para limpiarlo un poco. Aquí está el patrón que puede usar dentro de sus scripts de shell:fuente
telnet
, entonces, de forma predeterminada, se ejecuta en el puerto 23, por lo que donde slm ha usado 22 y 223, use 23.# telnet 192.168.10.5 Trying 192.168.10.5... Connected to 192.168.10.5 (192.168.10.5). Escape character is '^]'. Connection closed by foreign host.
# cat < /dev/tcp/192.168.10.12/23
me da un inicio de sesión pero no puedo salir de él.# cat afile ^]
después de ejecutar eso, solo está haciendo eco del descansoafile
. Sigo jugando con eso pero siento que ya casi estoy allí.Estás en el camino correcto usando
nc
, pero si realmente quieres probar si puedes establecer la conexión, usa el-z
interruptor de nc :fuente
nc
es esta?nc
.Sé que la respuesta es un poco tarde, pero estaba buscando cómo hacer esto y usar nc no era una opción por razones de seguridad, así que aquí está si puede ayudar a alguien.
Lo que faltaba en su eco inicial era el interruptor -e:
Y una nueva línea + el comando de salida para salir de Telnet después de desconectar. Como tal:
Obviamente, lo mismo funcionará si usa un estilo de bloque if enunciado y evalúa $? como lo hiciste inicialmente:
Mientras estamos en ello, en lo que respecta a nc, depende del sabor de nc que tenga (gnu ncat vs nmap-ncat). GNU tendrá el modificador -z:
mientras que el otro no lo hará y tendrá que canalizar una línea vacía a su nc para no quedarse atascado:
fuente
ejecutar
nc -z 192.168.10.5 23
en el símbolo del sistema o crear un script bash para ejecutar este comando.Devuelve la siguiente declaración si la conexión es exitosa.
¡Conexión al puerto 192.168.10.5 23 [tcp / *] exitosa!
fuente