Hola Donde te muestra la ip, tienes unos asteriscos, se los has puesto tu o se les pone el show?. To~o Carlos E. R. escribió:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hola:
Pues que lo conseguí, de forma casi automática. Me falta un paso.
Tengo un router adsl comtrend CT536+ de tesa. Es linux por dentro, bastante majo. Hace tiempo lo configuré para que me mandara su log al PC. Pero en el log falta un detalle:
Jan 29 11:36:56 router pppd[324]: Received valid IP address from server. Connection UP.
... que no dice la IP que ha conseguido. No es que lo oculte, pues se puede conseguir por comando, pero no lo lista en el log.
También miré si por snmp, que lo tiene, se puede sacar, pero no, no viene.
Si la sesión ssh se pudiera lanzar sin password, por pareja de llaves, y con un comando, el problema estaría resuelto; pero no puedo copiar la llave al remoto, ni el ssh admite la contraseña en la linea de comandos, ni el router admite comandos directos de esa guisa.
El caso es que el otro dia pregunté en la lista inglesa y me dijeron un truco para, usando el programa "expect" lanzar el ssh controlado por el programita, de manera que le da la contraseña y los comandos; por ejemplo, el siguiente script:
#!/usr/bin/expect spawn ssh -l 1234 router expect "1234@router's password: " send "contraseña\n" expect " ->" send "ping -q -c 50000 192.168.1.12\n" interact
... ejecutado en una consola me lanza una retahila de 50000 pings a mi PC, con lo cual consigo que no se me duerma, como he comentado otra vez.
El caso es que "expect" tiene un comando auxiliar para aprender de una sesion capturando su salida. Así, con "autoexpect ssh -l 1234 router" se lanza el ssh, entro, ejecuto mi comando para ver la IP, salgo, y ya tengo un script inicial llamado "script.exp" que hace lo que busco. Hay que editarlo un poquito, borrando lo que sobra, y listo:
#!/usr/bin/expect -f
set force_conservative 0 ;# set to 1 to force conservative mode even if ;# script wasn't run conservatively originally if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg } }
set timeout -1 spawn ssh -l 1234 router match_max 100000 expect -exact "1234@router's password: " send -- "password\r" expect " -> " send -- "wan show\r" expect "Hit <enter> to continue" send -- "\r" expect " -> " send -- "logout\r" expect eof
...ejecutando ese script, obtengo una salida como esta:
cer@nimrodel:~> ./script.exp spawn ssh -l 1234 router 1234@router's password: -> wan show VCC Con. Catego. Service Interface Proto. IGMP Nat QoS State Status DialMod IP ID Name Name address 0.8.32 1 UBR pppoe_8_32 ppp_8_32_1 PPPoE Disable Enable Enable Enable Up Direct 83.57.*.* 0.8.36 1 UBRwPCR pppoe_8_36_1 ppp_8_36_1 PPPoE Disable Enable Enable Enable PPP Down Direct
Hit <enter> to continue
-> logout
Bye bye. Have a nice day!!! Connection to router closed. cer@nimrodel:~>
Vale, pues ya sólo es cuestión de cortar:
cer@nimrodel:~> ./script.exp | grep 0.8.32 | cut --fields=14-15 83.57.*.*
Y ya tengo mi IP en un script! Llevaré un año destrás de esta curiosidad.
¿Cual es el siguiente paso? Pues hacer que el syslog-ng me detecte la siguiente linea:
Jan 29 11:36:56 router pppd[324]: Received valid IP address from server. Connection UP.
y lance la ejecución de un script, que ejecute lo de antes, y meta la IP en el log (quizás en el mismo log o en otro). Lo que no sé todavía es cómo conseguir eso del syslog, lanzar un script. Tendré que leerme el manual.
- -- Saludos Carlos E.R.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux)
iD8DBQFHnwdotTMYHG2NR9URAkl3AJ9s5kBEvdsldcpuxiWAtM17+zHHQgCfQ6nt JxtypzmpHRnp6zVyM2912K8= =Teq7 -----END PGP SIGNATURE-----
______________________________________________________________________ Este correo ha sido escaneado por el Sistema de Seguridad de Soria Natural.
This email has been scanned by the Soria Natural Security System. _______________________________________________
Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org