Vous êtes sur la page 1sur 19

Encender un ordenador desde Internet

ndice de contenido
Necesidad.............................................................................................................................................1 Qu software necesitamos....................................................................................................................3 Instalado Software................................................................................................................................4 Wakeonlan.......................................................................................................................................4 Sendemail.........................................................................................................................................4 Cliente mysql en linux.....................................................................................................................4 Cliente postgres en linux..................................................................................................................4 Configurando el software.....................................................................................................................5 Pginas ASP.....................................................................................................................................5 Base de datos postgres.....................................................................................................................5 Programas Linux..............................................................................................................................6 Encendiendo el equipo................................................................................................................6 Obteniendo los datos necesarios.................................................................................................7 Para que no pida contrasea........................................................................................................7 Automatizar el proceso...............................................................................................................7 Cdigo fuente.......................................................................................................................................7 ASP..................................................................................................................................................8 Fichero librera............................................................................................................................8 Fichero de peticiones................................................................................................................14 Linux...................................................................................................................................................15 Encendido de PC............................................................................................................................15 Procesamiento de peticiones.....................................................................................................17 Problemas conocidos.....................................................................................................................19 Y ahora qu?.....................................................................................................................................19

Necesidad
Esto es una conversacin mantenida entre un tcnico de sistemas y un usuario donde ste ultimo explica una necesidad o problema que tiene. (Usuario) Hola, mira necesito conectarme a mi ordenador de la empresa desde casa. (Tcnico) Y para qu necesitas conectarte a ese ordenador?. (Usuario) Bueno por dos razones, una porque tengo un dato que slo lo tengo en ese ordenador y otra porque tengo otros datos que necesito trabajarlos con un programa especfico que slo est instalado en esa mquina. (Tcnico) Se puede instalar ese programa en tu ordenador de casa?. (Usuario) Creo que no, no se puede porque tendra que comprar una licencia nueva que me vale un pasta, que no estoy dispuesto a pagar, no me lo puedes poner de forma ilegal, sin que nadie se entere?. (Tcnico) No, yo no instalo software de esa forma, hay algn otro tipo de limitacin?. (Usuario) S, segn me dijeron (los que mantienen el programa este) el software que uso slo funciona segn creo recordar en una LAN y para que funcionar en Internet (creo que hablaron de WAN y no s muy bien que significan estas palabrejas, LAN y WAN) este software deba ser cambiado y la empresa deba pagar no se cuanto dinero que creo que
Pg. 1 de 19

Encender un ordenador desde Internet

tampoco estn por la labor de pagar por esto a esta gente del programa. (Tcnico) Vaya voy comprendiendo. Necesitas acceder de distinta forma como haces habitualmente a tus datos y aplicaciones y nadie te puede ofrecer esta nueva utilidad de manera sencilla y sin costosas facturas. (Tcnico) Y esta nueva forma de acceder a tu informacin es puntual o se mantendr en el tiempo?. (Usuario) Ni idea lo nico que s es que tengo un problema hoy y durante este mes y no quiero estar en la oficina para esto. Podr resolver mi problema en poco tiempo si lo hago con mi ordenador, puedes ayudarme?. (Tcnico) Si no te preocupes, veremos en tu caso cual es la mejor forma de que puedas acceder a tu ordenador desde casa. (Tcnico) Lo suyo sera que se hiciese un plan para abordar este nueva problemtica del acceso a vuestra informacin desde la propia empresa y que sea esta la que proponga estos nuevos mtodos de trabajo. (Usuario) Ja, ja, Lo nico que s es que necesito resolver mi problema y en mi mano no est todo lo que t dices, puedes ayudarme?. (Tcnico) Conociendo tu empresa, lo que tenis y lo que puedo usar y si no hay impedimentos tcnicos vamos a hacer lo siguiente, respndeme a unas preguntas. (Usuario) No te pases que yo no s nada de informtica. (Tcnico) No te preocupes, esta es la primera pregunta. Cuando se acaba tu jornada laboral, cmo dejas tu ordenador? Encendido o apagado?. (Usuario) Apagado, por supuesto, nos tienen dicho que al irnos siempre se apague la mquina. (Tcnico) Bueno pues aqu viene la primera pega, se necesita que t mquina est encendida para que puedas trabajar en ella, parece una obviedad pero no lo es. (Usuario) Nadie en la oficina puede dar al botn cuando me voy y adems puede que no sepa que me tengo que conectar al ordenador antes de irme y apague el PC, qu se puede hacer en estos casos?. (Tcnico) Vamos a aprovechar los recursos de tu empresa y ver de que forma lo podemos hacer. (Tcnico) Tienes algn servidor en la oficina?. (Usuario) S, claro tenemos unos cuantos. (Tcnico) Tienes algn servidor web al que te puedas conectar ya desde tu casa?. (Usuario) S, es la Intranet. (Tcnico) Bueno pues ese lo podemos aprovechar para hacer una peticin al sistema para que se encienda tu ordenador (s que puedo encender de manera remota tu computadora mediante wol). (Usuario) Eh, qu es wol?. (Tcnico) No te preocupes por mi forma de hablar mientras estamos hablando he visto tu
Pg. 2 de 19

Encender un ordenador desde Internet

modelo de computadora y de lo es capaz de hacer y si podemos utilizar una par de recursos de un oficina podr resolver tu problema. (Usuario) Ah vale. Preguntar que Intranet tenemos y te cuento () Ya s que lo que tengo un servidor IIS que est en otra red y que funciona dando pginas ASP y base de datos postgres que no s que es eso. Adems me comentan que hay un servidor linux dentro de la red donde est mi ordenador. Adems me comentan que hay un servidor ocs dentro de la red, donde se registra mi equipo (es el inventario de los equipos). (Tcnico) Buenos pues ya tenemos todas la piezas necesarias, Pregunta si se puede poner una pgina web en el servidor web y un par de programas pequeos en el servidor linux junto con un par de tablas en la base de datos postgres. (Usuario) Me han dicho que no hay problemas, pero que me expliques cual es la forma que no lo acaban de ver claro. (Tcnico) Es muy sencillo, seguro que en vuestra Intranet hay una base de datos donde est guardado cual es tu PC, tu nombre, etc. Lo que voy a hacer yo es una pgina donde la gente haga peticiones de que se encienda de manera automticamente sus equipos o los equipos que quieran. Estas peticiones van a a quedar registradas en una base de datos. De hecho slo voy a guardar los siguientes datos: Quin hace la peticin de encendido El PC que se desea encender (Te sabes como se llama tu PC, no?) Cuando se hace la peticin La direccin de correo para avisarte a t o a quien quieras que se ha producido esto La fecha en que se ha encendido el equipo Una vez hecha la peticin un programa en el servidor linux, preguntar a vuestro servidor de inventario OCS el dato necesario para encender el nombre que t quieras, encender el equipo con ese dato, avisar al usuario que digas por correo electrnico y pondr en la base de datos de postgres la fecha de cuando la ha hecho. Esto es todo. (Usuario) Ah pues es fcil de entender. Ya me dirs cuando puedo probar que puedo encender tu mquina. (Tcnico) Ya te avisar cuando esta parte est acabada...

Qu software necesitamos
1. Que sea posible encender el equipo mediante wol. Informacin en ingles en este enlace http://en.wikipedia.org/wiki/Wake-on-LAN 2. Una base de datos postgres con al menos dos tablas: 1. una tabla para registrar los usuarios

Pg. 3 de 19

Encender un ordenador desde Internet

2. una tabla para registrar las peticiones 3. Un servidor de inventario con el software OCS 4. Un servidor IIS que sirva pginas web y tenga acceso a la base de datos postgres 5. Un servidor linux que cuente con 1. el paquete wakeonlan (este el programa que encender el equipo) 2. el paquete sendemail (para enviar correos usando cualquier servidor de correo con autenticacin incluido gmail) 3. acceso al servidor de postgres usando psql como cliente 4. acceso al servidor de mysql u ocs usando mysql como cliente 5. uso de cron para automatizar la tarea de mirar en la base de datos de posgres Asumimos que sabemos instalar todas las piezas de software. Tanto la pgina web en la Intranet, como dar de alta las tablas en el servidor de postgres, instalar los paquetes necesarios en el servidor linux y como editar el cron para repetir el trabajo.

Instalado Software
En nuestro caso partimos de un servidor bsico Ubuntu al cual le vamos a instalar todos los paquetes que necesitamos

Wakeonlan
Ejecutamos desde nuestra consola de administrador el siguiente comando aptitude install wakeonlan

Sendemail
Ejecutamos desde nuestra consola de administrador el siguiente comando aptitude install sendemail

Cliente mysql en linux


Ejecutamos desde nuestra consola de administrador el siguiente comando aptitude install mysql-client

Cliente postgres en linux


Ejecutamos desde nuestra consola de administrador el siguiente comando aptitude install postgresql-client postgresql-client-common De nuevo asumimos que todas las dems piezas del software estn ya instaladas y funcionando, es decir un servidor windows con IIS y acceso a un servidor de bases de datos postgres, junto con un servidor de inventario basado en LAMP, que es OCS

Pg. 4 de 19

Encender un ordenador desde Internet

Configurando el software
Pginas ASP
Hay que generar dos archivos asp dentro del servidor IIS, que ser la pgina de internet donde se solicitar el encendido de la mquina. Para facilitar la compresin del programa en una pgina librera.asp estarn las funciones auxiliares y en otra encenderpc.asp estar la pgina de solicitud

Base de datos postgres


Dentro del servidor de bases de datos necesitamos definir donde almacenaremos los datos que se generarn con este programa cuyo cdigo es el siguiente: CREATE TABLE logencenderpc ( id_registro bigserial NOT NULL, f_solicitud timestamp without time zone DEFAULT ('now'::text)::timestamp(6) with time zone, c_usuario character varying NOT NULL, nombre_pc character varying NOT NULL, e_mail character varying NOT NULL, f_encendido timestamp without time zone ) WITH OIDS; Donde los campos tienen los siguientes significados: id_registro para poder identificar y localizar de forma nica cada peticin que se haga f_solicitud es la fecha en que se hace la solicitud de encendido de la mquina. Por defecto esta fecha la gestiona el propio postgres y servir de ayuda para saber cuando hemos pedido o insertado un registro c_usuario es saber quien solicita un encendido de mquina. Adems la pgina asp filtrar mediante una consulta a esta tabla y le mostrar slo sus peticiones nombre_pc es donde se almacenar el nombre del PC que queremos encender. Notamos que ese dato es el que se conoce el usuario y no conoce su direccin MAC, que es el dato que necesitamos para que el comando wakeonlan de linux haga su trabajo e_mail es donde se almacenar la direccin de correo para que avisemos mediante este medio al usuario que su peticin ha sido procesada. Este dato lo usar el programa sendemail de linux f_encendido es la fecha que por defecto ser nula y que indicar cuando se ha procesado el encendido de la mquina. Este campo se actualizar desde el
Pg. 5 de 19

Encender un ordenador desde Internet

script de linux mediante una sentencia sql update Adems nos apoyamos en una tabla ya existente que contiene datos acerca del usuario, entre otros de esta tabla sacaremos por defecto tanto la direccin de correo electrnico junto con el PC que tiene por defecto este usuario La definicin de la tabla esta siguiente: CREATE TABLE usuarios ( c_usuario character varying NOT NULL, fecha_alta timestamp without time zone DEFAULT ('now'::text)::timestamp(6) with time zone, c_estado character varying DEFAULT 'Activo'::character varying, nombre character varying NOT NULL, apellidos character varying NOT NULL, alias character varying NOT NULL, e_mail character varying, extension character varying, telefonodirecto character varying, fax character varying, movil character varying, grupotelefonico character varying, nombre_pc character varying, empresa character varying, area character varying, departamento character varying, grupo character varying, fecha_ultimoacceso timestamp without time zone, ip_ultimoacceso inet, CONSTRAINT usuarios_pkey PRIMARY KEY (c_usuario) ) WITH OIDS;

Programas Linux Encendiendo el equipo


Como el programa necesita para encender un equipo de la direccin MAC apropiada y este dato est en una base de datos de mysql, se crear un programa el cual haga lo siguiente: Se le pasa el nombre del PC a encender, averiguamos la direccin MAC asociada a este nombre mediante esta consulta
Pg. 6 de 19

Encender un ordenador desde Internet

SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '$Equipo%' order by deviceid desc LIMIT 0,1000 Con los datos obtenidos de esta consulta ejecutamos el programa wakeonlan Observamos que como hemos puesto like podemos de una sola vez despertar de una sola vez varios equipos cuyo nombre empiecen por los mismo caracteres. Este programa se llamar enciendePC.sh

Obteniendo los datos necesarios


Necesitamos obtener la lista de peticiones de la tabla de postgres mediante la ejecucin de esta consulta select id_registro,c_usuario,nombre_pc,e_mail from logEncenderPC where f_encendido is null order by id_registro desc; Con los datos obtenidos ejecutamos el script anterior, enviamos un correo y actualizamos la base de datos mediante la siguiente consulta: update logEncenderPC set f_encendido = now() where id_registro = $id;

Para que no pida contrasea


Dentro de las limitaciones tcnicas del cliente psql es que no podemos dentro del script incluir la contrasea de acceso a la base de datos, para que nuestro script funcione debemos crear dentro de nuestro usuario de linux que va a ejecutar estos programa un fichero .pgpass y dentro del contenido de este fichero los datos necesario de la conexin Servidor:puerto:basededatos:usuario:contrasea Luego dar permisos suficiente de ejecucin al archivo. En la siguiente URL se explica con todo detalle como hacerlo. El script se debe llamar por ejemplo ProcesaPeticionesWOL.sh

Automatizar el proceso
Una vez comprobado que estos scripts de linux funcionan correctamente se le debe decir al sistema linux que el script de arriba se ejecute repetidamente cada cierto tiempo. Yo lo he puesto cada dos minutos aadiendo el siguiente cdigo mediante crontab -e. # m h dom mon dow command */2 * * * * ./ProcesaPeticionesWOL.sh En la siguiente URL se explica como hacer esto de manera detallada.

Cdigo fuente
Voy a poner en rojo lo que se debe de cambiar para ajustar a otro entornos. Necesitamos al menos acceso al servidor de postgres y necesitaremos los datos bsicos para la conexin a la par que verificar que el servidor acepte las conexiones tanto del servidor Asp como de nuestros scripts. Estos datos son:
Pg. 7 de 19

Encender un ordenador desde Internet

Nombre del servidor postgres y puerto Base de datos donde se guardar la aplicacin Usuario y contrasea

Adems necesitaremos acceso al servidor MySQL que gestiona el inventario de la red. Aqu pondremos los valores por defecto

ASP
Para facilitar la compresin separamos las funciones junto con el cdigo de la pgina principal. Es necesario una variable sesin que contenga el nombre del usuario porque con este dato se generar un registro en la base de datos de postgres. Adems recuperamos los datos como el PC asociado a ese usuario y su correo electrnico que tambin lo tenemos almacenado en postgres

Fichero librera
Se debe llamar libreria.asp y este es su cdigo <% ' Devuelve una cadena de conexin para conectarse a un servidor postgress Function CadenaConexion(BasedeDatos) Dim Aux Aux = "DRIVER={PostgreSQL};DATABASE=" & BasedeDatos & ";SERVER=Servidor;PORT=5432;Uid=usuario;Pwd=contrasea;" CadenaConexion = Aux End Function ' Escribe HTML con el sangrado para que sea legible en el navegador ' lo que devuelve el servidor asp Sub Representa_HTML (Numero_Tabulaciones, Cadena, Final_Linea) ' Pinta el texto que formatear el navegador Dim i, aux aux = "" For i = 1 To Numero_Tabulaciones aux = aux & vbTab Next aux = aux & Trim(Cadena) If Final_Linea = "Si" Then aux = aux & vbCrLf

Pg. 8 de 19

Encender un ordenador desde Internet

End If Response.Write aux End Sub Sub VerHistoricoEncendidos Dim CadenaSQL, Conn, Rs, connStr, Aux Dim contador CadenaSQL = "select * from logEncenderPC where f_encendido is not null and lower(c_usuario) = '" & LCase(Session("Username")) & "' order by 6 desc LIMIT 8;" contador = 0 ' Inicio de representacin de la tabla de los apuntes Call Representa_HTML (1, "<table width=""100%"" align=""center"" cellspacing=""0"" cellpadding=""2"">", "Si") Call Representa_HTML (2, "<tr>", "Si") Call Representa_HTML (3, "<td colspan=""4"" class=""TitularMenu"">Historico de ordenadores encendidos</td>", "Si") Call Representa_HTML (2, "</tr>", "Si") Set Conn = Server.CreateObject("ADODB.Connection") connStr = CadenaConexion("Basededatos") Conn.Open connStr Set Rs = Server.CreateObject("ADODB.Recordset") Rs.Open CadenaSQL, Conn While Not Rs.EOF If contador Mod 2 Then Aux = "<tr>" Else Aux = "<tr class='IMPAR'>"

Pg. 9 de 19

Encender un ordenador desde Internet

End If Call Representa_HTML (2, Aux, "Si") Aux = "<td>Equipo: " & Rs("nombre_pc") & " encendido el dia " & FormatDateTime(Rs("f_encendido"), 2) & " a las " & FormatDateTime(Rs("f_encendido"), 3) & ". Informe enviado a " & Trim(Rs("e_mail")) & "</td>" Call Representa_HTML (3, Aux, "Si") Aux = "</tr>" Call Representa_HTML (2, Aux, "Si") contador = contador + 1 Rs.MoveNext Wend Call Representa_HTML (1, "</table>", "Si") End Sub Sub Verpeticionespedidas Dim CadenaSQL, Conn, Rs, connStr, Aux Dim contador CadenaSQL = "select * from logEncenderPC where f_encendido is null and lower(c_usuario) = '" & LCase(Session("Username")) & "' order by id_registro desc;" contador = 0 ' Inicio de representacin de la tabla de los apuntes Call Representa_HTML (1, "<table width=""100%"" align=""center"" cellspacing=""0"" cellpadding=""2"">", "Si") Call Representa_HTML (2, "<tr>", "Si") Call Representa_HTML (3, "<td colspan=""4"" class=""TitularMenu"">Peticiones de ordenadores encendidos</td>", "Si") Call Representa_HTML (2, "</tr>", "Si") Set Conn = Server.CreateObject("ADODB.Connection") connStr = CadenaConexion("Basededatos") Conn.Open connStr

Pg. 10 de 19

Encender un ordenador desde Internet

Set Rs = Server.CreateObject("ADODB.Recordset") Rs.Open CadenaSQL, Conn While Not Rs.EOF If contador Mod 2 Then Aux = "<tr>" Else Aux = "<tr class='IMPAR'>" End If Call Representa_HTML (2, Aux, "Si") Aux = "<td>Equipo: " & Rs("nombre_pc") & " solicitado el dia " & FormatDateTime(Rs("f_solicitud"), 2) & " a las " & FormatDateTime(Rs("f_solicitud"), 3) & ".</td>" Call Representa_HTML (3, Aux, "Si") Aux = "</tr>" Call Representa_HTML (2, Aux, "Si") contador = contador + 1 Rs.MoveNext Wend Call Representa_HTML (1, "</table>", "Si") End Sub Sub FormEmciendePC ' Formulario que aade una nueva noticia Dim CadenaAux Dim CadenaSQL, AuxPC, AuxEMAIL CadenaAux = "<form name=""form2"" method=""post"" action=""EncenderPC.asp"">" Call Representa_HTML (2, CadenaAux, "Si") CadenaAux = "<p class=""TitularMenu"" colspan=""2"">" & "Rellena los campos si lo necesitas para encender tu equipo en la oficina" & "</p><br />" Call Representa_HTML (5, CadenaAux, "Si")

Pg. 11 de 19

Encender un ordenador desde Internet

CadenaAux = "<p class=""NovedadesTitular""><label> " & "Nombre del ordenador" & "<br />" Call Representa_HTML (5, CadenaAux, "Si") CadenaSQL = "select c_usuario, e_mail, nombre_pc from usuarios where lower(c_usuario)='" & LCase(Session("Username")) & "';" AuxPC = Busca_Valor_en_SQL ( CadenaSQL, "nombre_pc", "Basededatos" ) CadenaAux = "<input class=""TextoFormulario"" type=""text"" name=""NombrePC"" value="""& AuxPC & """ size=67 title=""Escribe aqu el nombre del PC que quiere encender"" MaxLength=80 onkeypress=""return handleEnter(this, event)""> </label></p>" Call Representa_HTML (5, CadenaAux, "Si") AuxEMAIL = Busca_Valor_en_SQL ( CadenaSQL, "e_mail", "Basededatos" ) CadenaAux = "<p class=""NovedadesTitular""><label> " & "Direccion de correo electronico" & "<br />" Call Representa_HTML (5, CadenaAux, "Si") CadenaAux = "<input class=""TextoFormulario"" type=""text"" name=""NombreEmail"" value="""& AuxEMAIL & """ size=67 title=""Escribe aqu el correo electronico para avisar cuando se haya encendido tu computadora"" MaxLength=80 onkeypress=""return handleEnter(this, event)""> </label></p>" Call Representa_HTML (5, CadenaAux, "Si") Call Representa_HTML (5, "<INPUT name=""Accion"" type=""hidden"" value=""EnciendePC"">", "Si" ) CadenaAux = "<input class=""botones"" type=""submit"" name=""Submit"" value=""Enciende la computadora"" title=""Haz clic aqu para enceder una computadora"" onclick=""alert('Se va a solicitar un encendido de maquina. Comprueba su listado de solicitudes')"">" Call Representa_HTML (5, CadenaAux, "Si") CadenaAux = "</form>" Call Representa_HTML (2, CadenaAux, "Si") End Sub Function InsertarSolicitudEncendido Dim CadenaSQL CadenaSQL = "insert into logEncenderPC (c_usuario, nombre_pc, e_mail) values ('" &
Pg. 12 de 19

Encender un ordenador desde Internet

Trim(Session("Username")) & "','" & Trim(Request("NombrePC")) &"','" & Trim(Request("NombreEmail")) & "');" InsertarSolicitudEncendido = Ejecuta_SentenciaSQL (CadenaSQL, "basededatos") End Function 'Funcin: Ejecuta una sentencia de SQL en la base de datos Function Ejecuta_SentenciaSQL (SQLStr, BaseDeDatos) Dim Conn, Rs, CadenaConexionODBC Dim Aux Aux = 0 CadenaConexionODBC = CadenaConexion(BaseDeDatos) Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open CadenaConexionODBC Set Rs = Server.CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open SQLstr, Conn Aux = Err.number Conn.Close Set Rs = Nothing Set Conn = Nothing Ejecuta_SentenciaSQL = Aux End Function ' Busca un valor en un campo en una sentencia SQL Function Busca_Valor_en_SQL ( sql, VariableSQL, BaseDeDatos ) Dim Conn, Rs, CadenaConexionODBC Dim Aux, vTemp

Pg. 13 de 19

Encender un ordenador desde Internet

Aux = 0 vTemp = "" CadenaConexionODBC = CadenaConexion(BaseDeDatos) Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open CadenaConexionODBC Set Rs = Server.CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open sql, Conn vTemp = Trim(Rs(VariableSQL)) Rs.Close Conn.Close Set Rs Set Conn = Nothing = Nothing

Select Case Err.number Case 0 Aux = vTemp Case Else Aux = Cstr(Err.number) End Select Busca_Valor_en_SQL = Aux End Function %> Ojo he quitado los ficheros javascript y los css que definen las clases. No creo que sea importante esto.

Fichero de peticiones
Este fichero se debe llamar EncenderPC.asp y bastara usar un navegador y poner http://servidordeinternet/EncenderPC.asp para efectuar la peticin. El cdigo es el siguiente: <%@ Language=VBScript %> <% Option Explicit

Pg. 14 de 19

Encender un ordenador desde Internet

Response.Expires = 0 Response.Buffer = True Server.ScriptTimeOut = 1500 ' insertamos el apunte If Request("Accion") = "EnciendePC" Then InsertarSolicitudEncendido End If %> <!--#include file="libreria.asp" --> <html> <head> <title>Encender tu equipo de la oficina desde Internet</title> </head> <body> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td class="TablaArribayAbajoyDcha" width="20%" valign=top> </td> <td class="TablaArribayAbajoeIzda" width="80%" valign=top> <% Call FormEmciendePC Call Verpeticionespedidas Call VerHistoricoEncendidos %> </td> </tr> </table> </body> </html>

Linux
Encendido de PC
El nombre del script debe llamarse por ejemplo enciendePC.sh. Debemos asegurarmos que este script tiene permiso de ejecucin (chmod +x enciendePC.sh)
Pg. 15 de 19

Encender un ordenador desde Internet

Su cdigo es el siguiente (ojo al copiar y pegar que los blancos pueden ejecutar malas pasadas): #!/bin/bash # Autor : Julio Ros 20110711 # Idea de acceso a MySQL basado de http://epistemomaniaticos.blogspot.com/2011/04/consultando-mysql-desde-bash.html # Script para ver la direccin MAC de un equipo registrados mediante inventario OCS Base de datos de MySql # http://www.ocsinventory-ng.org/en/ # Este script necesita lo siguiente: # Acceso a mysql desde la consola # el paquete wakeonlan http://packages.debian.org/squeeze/all/wakeonlan/download # ayuda para bash http://www.etxea.net/docu/taller_bash/bash.html # Configuracion base de datos DbUser=ocs DbHost=servidorocs DbPass=ocs DbName=ocsweb # Variables necesarias Equipo="PC0710" #Nombre del equipo que se quiere despertar if [ $# -ne 1 ]; then echo "Es necesario introducir 1 parmetro (que es el nombre del ordenador que queremos encender): $0 parametro1" exit -1 else Equipo=$1 RES=`echo "SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '$Equipo%' order by deviceid desc LIMIT 0,1000" | mysql -N -B -u $DbUser --host $DbHost -p$DbPass $DbName` # Ejecuto la consulta y la guardo en RES OLDIFS="$IFS" # Respaldo el valor de IFS, no olvidar las comillas dobles IFS=$'\n' # Seteo el valor de IFS que me sirve for row in $RES ; # Itero por los registros porque for separar por \n do if [ ${#row} -gt 0 ]; then # Chequeo si tengo un registro
Pg. 16 de 19

Encender un ordenador desde Internet

INNERIFS="$IFS" # Hago un respaldo temporal de IFS, no olvidar las comillas dobles IFS="$OLDIFS" # Ahora separar los campos id=$(echo $row | awk '{print $1}') # Utilizo awk porque s el orden de los campos: id es el 1 y nombre es el 2 # # nombre=$(echo $row | awk '{print $2}') echo "El id es $id y el nombre es $nombre" echo "Encendiendo el equipo $Equipo a travs de $id" wakeonlan $id IFS="$INNERIFS" # Vuelvo a hacer que IFS separe por \n para la prxima iteracin fi done IFS="$OLDIFS" # Dejo IFS en su estado original. fi

Procesamiento de peticiones
El nombre del script debe llamarse por ejemplo ProcesaPeticionesWOL.sh. Debemos asegurarmos que este script tiene permiso de ejecucin (chmod +x enciendePC.sh) Necesitamos acceso a un servidor de correo y al servidor de base de datos, dentro del cdigo en rojo Su cdigo es el siguiente (ojo al copiar y pegar que los blancos pueden ejecutar malas pasadas): #!/bin/bash # Autor : Julio Ros 20110729 # Idea de acceso a postgres basado de http://systems.takizo.com/2010/07/12/postgresql-databasepsql-command-line-query/ # Este script necesita lo siguiente: # Acceso a postgres desde la consola # el paquete sendemail para enviar alertas por correo electrnico http://caspian.dotconf.net/menu/Software/SendEmail/ # Configuracion base de datos DbUser=UsuarioPostgres DbHost=ServidorPostgres DbName=Basededatos
Pg. 17 de 19

Encender un ordenador desde Internet

# Configuracion cuenta que enva correo ServidorCorreo=servidordecorreo Remitente=usuario@servidordecorreo usuarioCorreo=usuariodecorreo passwordcorreo=contraseadecorreo asunto="" cuerpomensaje="" Aux="" # Variables necesarias SentenciaSQL="select id_registro,c_usuario,nombre_pc,e_mail from logEncenderPC where f_encendido is null order by id_registro desc;" RES=`psql -d $DbName -U $DbUser -h $DbHost -A -t -c "$SentenciaSQL"` # Ejecuto la consulta y la guardo en RES OLDIFS="$IFS" # Respaldo el valor de IFS, no olvidar las comillas dobles IFS=$'\n' # Seteo el valor de IFS que me sirve #echo $RES for row in $RES ; # Itero por los registros porque for separar por \n do if [ ${#row} -gt 0 ]; then # Chequeo si tengo un registro INNERIFS="$IFS" # Hago un respaldo temporal de IFS, no olvidar las comillas dobles IFS="$OLDIFS" # Ahora separar los campos id=$(echo $row | cut -d "|" -f 1) nombre=$(echo $row | cut -d "|" -f 2) equipo=$(echo $row | cut -d "|" -f 3) destinatario=$(echo $row | cut -d "|" -f 4) echo "procuramos encender el equipo" ./enciendePC.sh $equipo SentenciaSQL="update logEncenderPC set f_encendido = now() where id_registro = $id;" #echo "El id es $id y el nombre es $nombre y el equipo es $equipo y el correo es $destinatario" echo "Ejecutamos $SentenciaSQL"
Pg. 18 de 19

Encender un ordenador desde Internet

Aux=`psql -d $DbName -U $DbUser -h $DbHost -A -t -c "$SentenciaSQL"` # Ejecuto la consulta y la guardo en RES echo "enviamos correo a $destinatario" asunto="Envio automatico de solicitud de equipo $equipo encendido procesada" cuerpomensaje="Comprueba que dentro de 5 minutos su computadora($equipo) es accesible para usted.\nPor favor no responda a este mensaje. \n.Nadie lo va a leer." sendEmail -f $Remitente -t $destinatario -s $ServidorCorreo -xu $usuarioCorreo -xp $passwordcorreo -u "$asunto" -m "$cuerpomensaje" IFS="$INNERIFS" # Vuelvo a hacer que IFS separe por \n para la prxima iteracin fi done IFS="$OLDIFS" # Dejo IFS en su estado original.

Problemas conocidos
Los acentos y caracteres especiales en el correo se codificaban mal. He optado por poner faltas de ortografa y ya ver como se resuelve esta incidencia

Y ahora qu?
(Tcnico) Bueno ya puedes encender tu ordenador de la oficina desde tu casa (Usuario) Es un poco complicado pero me vale, pero y ahora que est encendido cmo me conecto al ordenador y trabajo desde l? (Tcnico) Hay unas cuantas posibilidades, una de ellas es instalar este software. Espero que nadie de tu organizacin se moleste porque intentes usar este u otro software de este estilo. Slo creo que lo debes instalar en el ordenador de tu empresa. Sigue sus instrucciones y listo. Por cierto no tengo nada que ver con este software por si alguien te pregunta. (Usuario) Gracias por todo y ya te dir si todo ha ido bien. (Tcnico) Recuerda que mi correo es julio punto rios punto 2006 arroba gmail punto com por si tienes alguna pega.

Pg. 19 de 19