El cortador de césped es una de esas películas sobre el ciberespacio y la inmersión en ‘mundos digitales’. Cuando la vi de pequeño en el cine me impresionó mucho, aunque supongo que ahora, si la viese, me parecería más bien floja.

En cualquier caso, una cosa que se me quedó grabada es el final de la película en la que, finalmente, el cortador de césped, viviendo en el ciberespacio, consigue escapar a la ‘prisión’ donde le intentan atrapar y hace sonar todos los teléfonos de la Tierra.

Pues bien, gracias a Sevilla Sec&Beer ahora tú también puedes hacer realidad este sueño de juventud, hacer sonar muchos teléfonos a la vez, gracias a la  voz sobre IP y a las credenciales por defecto.

Lo primero que tienes que conseguir es un sitio donde haya muchos teléfonos IP con alguna interfaz de configuración a la que puedas llegar. Luego tienes que tener la suerte de que no hayan cambiado las credenciales de acceso por defecto para administrar. Y por último sólo te hace falta tener unos mínimos conocimientos de scripting para lanzar los mismos comandos a todos a la vez.

Recientemente he tenido la suerte de encontrarme un entorno de estas características. Sesenta y tantos teléfonos IP de la marca Thomson (ya sabéis, no comprad sin Thom ni Son). Estos teléfonos tienen una interfaz web y otra telnet. El usuario administrador tiene como credenciales por defecto ‘administrator/784518′.

Echando un ojo a la interfaz telnet nos encontramos que podemos hacer de todo con el teléfono. Entre otras cosas, podemos hacer que se enciendan los leds y que suene el tono de llamada que queramos.

Pues ya sólo nos queda preparar un script. Para eso, y sin que sirva de precedente, yo he usado expect, que está especialmente pensado para interaccionar con sistemas remotos en base a dos comandos principales expect "algo" y send "algo".

El script en cuestión es el siguiente (le he llamado thomson.ip).

set address [lrange $argv 0 0]
spawn ncat -tC $address 23
expect "Login: "
send "administrator\r"
expect "Password: "
send "784518\r"
expect "#"
send "music start 1\r"
expect "#"
send "exit"

Este script acepta una dirección IP como argumento y hace que suene el teléfono. He usado ncat en vez de telnet porque, por alguna causa, no acababa de autenticarse bien.

Ahora sólo nos queda lanzarlo a la vez para todos los teléfonos. Para ello usaremos las capacidades de paralelismo de xargs. También puedes usar GNU parallel que precisamente es un xargs que lanza en paralelo los comandos.

Suponiendo que has creado un fichero llamado tlfs.ip con una línea por cada dirección IP que pertenezca a un teléfono, podemos hacer lo siguiente para hacerlos sonar todos a la vez.

cat tlfs.ip | xargs -n 1 -P `cat tlfs.ip | wc -l` expect thomson.expect

Y ya está. Riiingggg, riiiiiingggg, riiiiinggggggg, riiiiiingggg, riiiiiingggg….

Bueno, aparte de la chorrada de hacer sonar los teléfonos, la moraleja de todo esto es que hay que tener cuidadito con cambiar las credenciales por defecto, por un lado, y desactivar los servicios si no se usan, por otro. Si no, que suenen todos los teléfonos a la vez va a ser el menor de tus problemas.