2012-04-16 54 views
6

Me estoy conectando a un oyente telnet. El servidor Telnet envía "1234" por cada segundo. Quiero leer el mensaje "1234" y cerrar la sesión de telnet. Aquí abajo está mi código pero no funciona.Script de Linux para analizar el mensaje telnet y salir

#!/bin/bash 
telnet 192.168.10.24 1234 
read $RESPONSE 
echo "Response is"$RESPONSE 
echo "quit" 

¿Cómo puedo leer automáticamente el mensaje de telnet?

Respuesta

5

usted podría utilizar el mecanismo interno de TCP:

#!/bin/bash 

exec 3<>/dev/tcp/127.0.0.1/80 
# echo -en "eventualy send something to the server\n" >&3 
RESPONSE="`cat <&3`" 
echo "Response is: $RESPONSE" 

O usted podría utilizar nc (netcat), pero por favor no nos e telnet!

+0

¡Gracias! ¡Funcionó! Pero lo que es para "3 <>" y "' cat <& 3' ". ¿Son para dirigir STDIN a RESPUESTA? – user1336117

+1

Puede consultar el párrafo REDIRECCIÓN en la página de manual de bash para ver cómo/dev/tcp, exec y <> trabajan. Sustancialmente, usted solicita que bash abra para leer y escribir, en el mismo shell, el descriptor de archivo n. ° 3 y para adjuntarlo a una secuencia TCP en 127.0.0.1 puerto 80. – dAm2K

0

es necesario utilizar esperaba, me temo que es un caso en el que es necesario comprobar el manual de allí en tan esperar es en efecto su propio idioma para analizar salida de la aplicación y actuar sobre los resultados

+0

Gracias, voy a leer sobre el esperar y luego escribir el resultado aquí. – user1336117

1

redirección la salida a un archivo y leer el archivo

telnet [ip-address] > /tmp/tempfile.txt 
+0

Está funcionando pero estoy obteniendo algunas cadenas innecesarias como "Intentando 192.168.10.24 ...". Creo que no puedo usar telnet para la comunicación de ethernet entre dispositivos. Creo que tengo que implementar mi propio programa de socket. ¿Tienes alguna sugerencia? – user1336117

+0

solo trata de quitar las líneas que no necesitas. como grep -v "línea no deseada" funcionará y el programa de socket puede ser más costoso que esto. pero de nuevo, todo depende de tu necesidad. – siva

1

El método más simple y fácil se proporciona a continuación.

sleep <n> | telnet <server> <port> 

n - El tiempo de espera en segundos antes de la salida de automóviles. Podría ser fraccional como 0.5. Tenga en cuenta que algunos resultados requeridos pueden no ser devueltos en el tiempo de espera especificado. Por lo tanto, es posible que tengamos que aumentar en consecuencia.

servidor - IP del servidor de destino o nombre de host.

puerto - Número de puerto del servicio de destino.

También puede redirigir la salida a un archivo de este tipo,

sleep 1 | telnet <server> <port> > output.log 
0

ya ha respondido, pero aquí hay otro punto de vista utilizando rizo, útil para un rápido control (es decir, activo o de servicios no). Tuve que luchar un poco para evitar soluciones de "guión" y "esperar".

simplemente un talón para una posible comprobación POP3:

echo "quit" | curl telnet://localhost:110 > /tmp/telnet_session.txt 
if grep "POP3 ready" /tmp/telnet_session.txt; then 
     echo "POP3 OK" 
else 
     echo "POP3 KO" 
fi 
Cuestiones relacionadas