Encendiendo computadoreas de Manera Remota

Encendiendo equipos de manera remota Julio Ríos Encendiendo ordenadores sin levantarse de la silla Índice de contenid

Views 48 Downloads 3 File size 103KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Encendiendo equipos de manera remota

Julio Ríos

Encendiendo ordenadores sin levantarse de la silla

Índice de contenido Problemática.........................................................................................................................................1 Solución................................................................................................................................................1 Limitaciones.....................................................................................................................................1 Solución................................................................................................................................................1 Solución entorno Windows..............................................................................................................2 Solución entorno GNU/Linux..........................................................................................................5 Advertencia...........................................................................................................................................7

Problemática A veces necesitamos hacer algo con algún computador que está alejado de nuestro sitio, y sabemos que está apagado. Necesitamos encenderlo y nos resultaría muy cómodo poder encenderlo desde nuestro sitio sin tener que desplazarnos hasta su sitio y pulsar el botón de encendido.

Solución Resolver este problema es posible siempre y cuando se den unas cuantas combinaciones: • La placa madre de la computadora debe ser capaz de esto • La tarjeta de red de la computadora debe ser capaz de esto • Se le debe activar estas opciones tanto a la placa base como a la tarjeta de red Este manual no trata de resolver como se debe activar estos parámetros tanto en la tarjeta de red, como en la placa base. Si se quiere saber si una computadora es capaz de ser encendida mediante el uso de la otra se le debe preguntar al fabricante del equipo si es capaz de esto. Generalmente esto se conoce como wol (wake on lan). Este manual asumirá que es posible arrancar mediante esta técnica los equipos que nosotros queremos.

Limitaciones Entre las limitaciones intrínsecas es que sólo se pueden arrancar los equipos que estén conectados en nuestra LAN, no pudiendo arrancar equipos que estén en redes WAN.

Solución Para arrancar un equipo de manera remota nosotros necesitamos conocer la dirección MAC de la tarjeta de red, este es un número complejo que hace que los humanos no podamos recordar con facilidad. Nosotros podemos recordar por ejemplo el nombre del PC que queremos arrancar pero no su dirección MAC. Para evitar tener la dirección MAC de las tarjetas de red de nuestros equipos anotadas en un julio punto rios punto 2006 arroba gmail punto com

Pág. 1 de 7

Encendiendo equipos de manera remota

Julio Ríos

documentos de texto yo he usado un software libre para inventariar los equipos que se llama OCS, donde se puede encontrar información de este software en el siguiente enlace http://www.ocsinventory-ng.org/en/ Este software entre otras muchas cosas recolecta este dato y asocia los datos que nosotros necesitamos que son el nombre del PC (que solemos recordar) y la dirección MAC. Este dato este software lo guarda en una base de datos de MYSQL. Por defecto los parámetros para la conexión a esta base de datos son: Dirección IP o Nombre del servidor Usuario: ocs Contraseña: ocs Base de datos: ocsweb La consulta SQL que asociará la dirección MAC al nombre de la computadora es la siguiente: SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '[Nombre del Equipo]%' order by deviceid desc LIMIT 0,1000 Así pues la solución consiste en utilizar un programa para arrancar el equipo y poder pasar pasarle como parámetro la dirección MAC

Solución entorno Windows Lo que se necesita para poder ejecutar este programa es que la máquina que intentará despertar máquinas remotas necesita lo siguiente: MySQL ODBC conector 5.1 (http://dev.mysql.com/downloads/connector/odbc/) Programa WOL (http://www.gammadyne.com/cmdline.htm#wol) Script para arrancar el programa El código script es el siguiente: ''''''''''''''''''''''''''''' ' Arrancar los equipos de una oficna intentado encontrar la mac usando la base de datos ocs de MySQL ' Es necesario tener instalado el odbc de Mysql ' http://www.gammadyne.com/cmdline.htm#wol Programa para arrancar equipos ' http://dev.mysql.com/downloads/connector/odbc/ conector odbc para windows Const ForReading = 1 Function CadenaConexion ' Para poder acceder a la base de datos Const Aux = "Driver={MySQL ODBC 5.1 Driver};Server=servidor;Port=3306;Database=ocsweb;User=ocs; Password=ocs;Option=3;" CadenaConexion = Aux End Function Function TrataComillas (Cadena) TrataComillas = Replace (Cadena, "'", "''") End Function 'Función: Ejecuta una transacción SQL en la base de datos Sub Ejecuta_Transaccion (SQLStr) julio punto rios punto 2006 arroba gmail punto com

Pág. 2 de 7

Encendiendo equipos de manera remota

Julio Ríos

Dim Conn, Rs Set Conn = CreateObject("ADODB.Connection") Conn.Open CadenaConexion Set Rs = CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open SQLstr, Conn Conn.Close Set Rs = Nothing Set Conn = Nothing End Sub Function QuitarCaracter (Cadena) ' Quitar el caracter : de la cadena QuitarCaracter = Replace (Cadena, ":", "") End Function Sub ArrancarEquipo (NombrePC) Dim objShell, Aux Aux = "%comspec% /c wol " & NombrePC On Error Resume Next Set objShell = CreateObject("Wscript.Shell") objShell.Run Aux, , true End Sub Sub Main() Dim CadenaSQL Dim Conn, Rs Dim Aux, NombreEquipo NombreEquipo = InputBox("Introduce el nombre del equipo que quieres encender", "Nombre del Equipo a encender") If NombreEquipo "" Then CadenaSQL = "SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '" & NombreEquipo & "%' order by deviceid desc LIMIT 0,1000" Set Conn = CreateObject("ADODB.Connection") Conn.Open CadenaConexion Set Rs = CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open CadenaSQL, Conn While Not Rs.EOF Wscript.Echo "Intentando arrancar el equipo " & NombreEquipo & " usando: " & QuitarCaracter(Rs("macaddr")) Call ArrancarEquipo (QuitarCaracter(Rs("macaddr"))) Rs.MoveNext julio punto rios punto 2006 arroba gmail punto com

Pág. 3 de 7

Encendiendo equipos de manera remota

Julio Ríos

Wend Conn.Close Set Rs = Nothing Set Conn = Nothing End If End Sub Call Main() '''''''''''''''''''''''''''''

julio punto rios punto 2006 arroba gmail punto com

Pág. 4 de 7

Encendiendo equipos de manera remota

Julio Ríos

Se debe generar un fichero vbs tal y ponerlo en una carpeta junto el fichero wol.exe tal y como acompaña el siguiente gráfico

Para ejecutar el script basta hacer doble clic sobre el icono EncenderPC t luego poner el nombre del PC a encender

Solución entorno GNU/Linux Adjunto un script que hace lo mismo ###################### #!/bin/bash # Autor : Julio Ríos 20110711 # Idea de acceso a MySQL basado de http://epistemomaniaticos.blogspot.com/2011/04/consultando-mysql-desde-bash.html # Script para ver la dirección 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 zenity para hacer más mono la intraducción de datos (http://library.gnome.org/users/zenity/stable/index.html.es) # el paquete notify-send para hacer más mono la salida de datos julio punto rios punto 2006 arroba gmail punto com

Pág. 5 de 7

Encendiendo equipos de manera remota

Julio Ríos

http://www.userlinux.net/1393_notify_send.html # el paquete wakeonlan http://packages.debian.org/squeeze/all/wakeonlan/download # Configuracion base de datos DbUser=ocs DbHost=servidor DbPass=ocs DbName=ocsweb # Variables necesarias Equipo=$(zenity --entry --title="Nombre de la computadora a encender" --text="Escribe el nombre del PC que quieres encender") 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 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 través de $id" notify-send -i /usr/share/icons/Nuvola/scalable/actions/dialog-ok.svg "Encendiendo el equipo $Equipo a través de $id" wakeonlan $id IFS="$INNERIFS" # Vuelvo a hacer que IFS separe por \n para la próxima iteración fi done IFS="$OLDIFS" # Dejo IFS en su estado original. ###################### Observar que yo uso notify-send y un conjunto de icono llamado Nuvola. Se deberá cambiar esto si se quiere que funcione la notificación en el escritorio. Generar un fichero con este código y luego ejecutarlo bien con un lanzador o desde la consola

julio punto rios punto 2006 arroba gmail punto com

Pág. 6 de 7

Encendiendo equipos de manera remota

Julio Ríos

Advertencia Como el código está dentro de un documento de texto al hacer el script ya sea en entornos windows como en GNU/Linux tomar la precaución de que al copiar y pegar al editor de textos esto se hace correctamente porque sino el script no funcionará.

julio punto rios punto 2006 arroba gmail punto com

Pág. 7 de 7