Tonterías remotas con el PC sin abrir puertos

Alguna vez he querido hacer alguna cosa puntual en mi PC remotamente, sea desde el móvil o desde otro PC, pero en cualquier caso desde fuera de casa. Como no me gusta andar abriendo puertos en el router y en el firewall para una cosa que voy a dejar de usar en unos días suelo usar un método alternativo.

La última vez que necesité montar algo así fue para vacilar a cierta persona, y es el ejemplo que voy a explicar aquí.

La idea es la siguiente: un php online (vale cualquier hosting gratuito) y un script corriendo en el PC. A través de un formulario en el php decimos al ordenador qué queremos que haga, y el script recoge las órdenes.

Nada espectacular, pero es sencillo y funciona.

En este ejemplo en particular quería escribir una frase en el formulario web a través del móvil, y que la frase fuese pronunciada por un sintetizador de voz en el ordenador del salón a través de los altavoces (los cuales comparte con la PS3, que era la gracia para que el “invento” no resultase obvio).

La parte php sería algo como esto:

[sourcecode language=’php’]

class=”hiddenSpellError” type=”text” />type=”\”hidden\”” name=”\”spdfunc\”” value=”\”u\”” />”;
echo ”

class=”hiddenSpellError”>action=”txt.php?spdfunc=w” method=”post”>”;

echo “class=”hiddenSpellError” type=”text” />type=”text” name=”msg” value=”\”” size=”\”30\”” />”;
echo “class=”hiddenSpellError” type=”text” />type=”\”submit\”” name=”\”enviar\”” value=”\”Talk!\”” />”;}

echo “”;
}

if ( isset($_POST[‘enviar’]) )
{

$myFile = “t.spd”;
$fh = fopen($myFile, ‘w’) or die(“can’t open file”);
$stringData=$_POST[‘msg’];
fwrite($fh, $stringData);
fclose($fh);
}

?>
[/sourcecode]

Lo que hace el script es lo siguiente: si accedemos a la página php con el parámetro “?spdfunc=w” nos mostrará un formulario donde escribir el texto. Al enviarlo se guardará en un fichero de texto en el servidor, y no permitirá volver a mandar otro texto hasta que el PC lo haya leido accediendo a la web con el parámetro “?spdfunc=r”, momento en que escribirá un * en el fichero para indicar que ya está leído.

Se podría sanear la entrada del formulario para que no entren textos demasiado grandes, pero me sentía perezoso y sólo lo tuve online un par de días de todas formas.

La parte de script que se ejecutaría en el PC sería algo como esto:

[sourcecode language=’bash’]

#!/bin/bash
wget “http://www.nuestraweb.com/txt.php?spdfunc=r” -O ~/texto.txt
tcontent=$(cat ~/texto.txt)
if [ “$tcontent” != “*” ]
then
espeak -a 100 -p 0 -s 88 -g 10 -v mb-es1 -f ~/texto.txt
fi

[/sourcecode]

Debemos tener instalado “espeak” para que sintetize el texto como voz, y configurar el script para ser lanzado por ejemplo cada 5 o 10 segundos. Podemos hacerlo a través de cron o cualquier otro planificador de tareas.

El script hace un wget del php con el parámetro “?spdfunc=r” para leer el archivo que habíamos escrito previamente, si había alguno, y luego le pasa ese texto al espeak.

Se podría hacer mucho más limpio y más seguro, por ejemplo como decía antes saneando la entrada del php, pero la idea es básicamente esa.

Esto lo combiné con otro par de scripts similares que me creaban un registro online de las horas a las que se encendía y apagaba la PS3, con lo que sabía el momento justo en que la persona objetivo iba a estar delante de la tele e iba a oír lo que el sintetizador tuviese que decir.

  • Pingback: Llamando a la puerta de nuestro ordenador | TechCat()

  • Daniel

    Buenas noches, quería preguntarte si es posible que me hagas un trabajo, podemos acordar una cantidad a pagar. Llevo días con esto y ya veo que yo no soy capaz.
    En resumen se trata de lo siguiente:
    1. Tengo un servidor linux ubuntu 13.04 en Amazon EC2 (sin Apache ni PHP). A este servidor solo se accede mediante llave publica, privada…. y así quiero que siga ya que la seguridad es vital para mis clientes.
    2. Allí tengo 100 usuarios con 100 Server Velneo (Se trata de una aplicación que sirve aplicaciones como servicio).
    3. En mi web http://www.finanplan.com (wordpress) que está en un Hosting (Piensasolutions) quiero que al loguearse los usuarios accedan a un area de clientes desde la que pueden ejecutar unos comandos básicos de ubuntu que arrancan, paran e informan del estado del vServer de Velneo (en el servidor Amazon EC2) en su carpeta de ubuntu y con su codigo de usuario ubuntu.

    Es decir se trata de acceder al servidor de Amazon EC2 desde mi web finanplan.com y ejecutar allí los comandos que he comentado. Estoy intentando hacerlo con PHP desde mi web, abriendo una sesión SSH, pero el servidor de Amazon EC2 no admite estas conexiones.

    En fin si te interesa podemos contactar y te lo explico con todo detalle.

    Un saludo. Daniel. Abrera (Barcelona)

    • Hola Daniel, te contesto por correo.

      Un saludo.