Apagado remoto de computadoras

7
Universidad Autónoma de Chihuahua Facultad de ingeniería Administración de centros de cómputo Proyecto: Apagado remoto de computadoras Integrantes: Marcos Samuel Gómez García 199441 Marcos Abelardo Borunda García 199503 Grupo: 8°K Catedrático: Oscar Ramsés Ruiz Varela

description

Aplicación desarrollada en Java la cual apaga computadoras con sistema operativo Windows desde un servidor Linux a través de su dirección IP

Transcript of Apagado remoto de computadoras

Page 1: Apagado remoto de computadoras

Universidad Autónoma de Chihuahua Facultad de ingeniería

Administración de centros de cómputo

Proyecto: Apagado remoto de computadoras

Integrantes: Marcos Samuel Gómez García 199441 Marcos Abelardo Borunda García 199503 Grupo: 8°K

Catedrático: Oscar Ramsés Ruiz Varela

Page 2: Apagado remoto de computadoras

Apagado remoto de computadoras Descripción del proyecto El sistema como su nombre lo indica, permite el apagado remoto de computadoras, esto se logra mediante una interfaz web. Tenemos la siguiente estructura:

En este caso la PC (a) con la IP 192.168.0.2 funcionara como nuestro servidor, esta PC corre bajo Ubuntu 9.04, y tiene acceso a Internet mediante el Cable/Modem con la IP 192.168.0.1 al igual que las otras dos computadoras. En la computadora (a) es donde se aloja nuestra página web, que contiene el programa que realiza la tarea de apagar las computadoras que están en su misma red. El usuario al ingresar a la página http://teapagolacompu.no-ip.org tiene como primera pantalla la siguiente imagen:

Page 3: Apagado remoto de computadoras

Donde se pide al usuario que ingrese el comando a utilizar (apagar terminal ó servidor), las cuales se explican a continuación: Comando apagar terminal: Este comando nos muestra la siguiente interfaz:

Donde se nos pide que ingresemos la dirección IP de la computadora a apagar (la IP de la red local no la de internet) además del tiempo en el cual desea apagar la computadora (en segundos). Por último solo resta dar clic al botón “enviar”, como una forma de confirmación se manda un mensaje mostrando que la operación se llevo a cabo satisfactoriamente:

Page 4: Apagado remoto de computadoras

Comando servidor: Este comando nos da una herramienta muy poderosa, puesto que nos da acceso a la terminal de nuestro servidor, es decir al control total de este. Y con una configuración apropiada de nuestra red, como extra nos puede dar acceso a las demás computadoras. Esto a través de la siguiente pantalla:

En este caso como una forma de ejemplo mandamos el comando ls /home/user/Desktop que nos devolverá como resultado, todas las carpetas y archivos que contiene el Escritorio del servidor de la siguiente manera:

Page 5: Apagado remoto de computadoras

Herramientas utilizadas en el servidor Sistema operativo: Ubuntu 9.04 Lenguaje de programación: Java J2EE (servlets y JSP) Servidor web: Apache/Tomcat 6 Otros programas: NOIP(programa para IP’s dinámicas) Sistema: Se utilizó el entorno de desarrollo NetBeans IDE 6.7.1 para desarrollar la aplicación. El código generado para este proyecto es el siguiente: Este es el código JSP de la página principal

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Bienvenido</title>

</head>

<body

background="http://www.tij.uia.mx/vidauniv/publicaciones/deciertomar/images/fondo.g

if">

<form action="ApagarWindows" method="POST">

<center>

<strong><font size=24 color ="white">Introduzca el

comando</font></strong>

<p>

<img src

="http://thumbs.dreamstime.com/thumb_339/12282598707YbD6m.jpg">

<p>

Comando: <input type="text" name="contra" value="" size="45" />

<input type="submit" value="Enviar" name="enviar" />

</p>

</center>

</form>

</body>

</html>

Como se puede observar en el código todo está en lenguaje HTML, se utilizan las

etiquetas típicas para agregar imagen de fondo, darle formato al texto, poner imágenes

en la página pero la parte importante del código es la siguiente línea donde dice

“Comando: <input type="text" name="contra" value="" size="45" />” ya que la

cadena que se capture dentro de este TextBox es la que se pasará como parámetro a los

servlets y validará si la contraseña ingresada es la correcta, además de que dependiendo

de la contraseña ingresada nos redireccionará a un servlet o a otro. Por ejemplo si se

teclea la palabra “servidor” se abrirá una página donde se pueda enviar comandos

Page 6: Apagado remoto de computadoras

directamente a la terminal del servidor, si se selecciona la cadena “apagar terminal” se

abrirá la página que permitirá apagar una computadora remotamente.

Este es el primer servlet, donde se verifica si se envió “servidor” o “apagar

terminal”

public class ComandWin extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse

response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

out.println("<center><h3>Apagando PC "+

request.getParameter("ip").toString() + " en " +

request.getParameter("tiempo").toString() + " segundos </h3></center>");

Process p = Runtime.getRuntime().exec("net rpc SHUTDOWN -C \"Apagando

remotamente \" -f -t " + request.getParameter("tiempo").toString() +" -I " +

request.getParameter("ip").toString() + " -U usuario%contraseña");

BufferedReader in = new BufferedReader(

new InputStreamReader(p.getInputStream()));

String line = null;

out.println("<html>");

out.println("<head>");

out.println("<title>Apagando computadora</title>");

out.println("</head>");

out.println("<body

background=\"http://www.tij.uia.mx/vidauniv/publicaciones/deciertomar/images/fondo.

gif\">");

while ((line = in.readLine()) != null) {

out.println("<p>"+line+"</p>");

}

out.println("</body>");

out.println("</html>");

}

finally {

out.close();

}

}

Aquí en esta parte del código podemos observar que ya no se utiliza lenguaje HTML

puro sino que las líneas de comandos utilizadas se usan tal y como se usarían en un

programa típico de Java. Lo que quiere decir que si tenemos que enviar alguna

instrucción en HTML para que la acepte la página la tenemos que enviar como si fuera

una cadena, es por esa razón que todo el código en HTML se coloca dentro de la

instrucción “out.printline()”. La ventaja de que se pueda implementar código de Java

en una página web es que se pueden utilizar todas las sentencias utilizadas en dicho

lenguaje pero montadas en una página. Por ejemplo, para apagar una computadora

utilizamos la siguiente instrucción: “Process p = Runtime.getRuntime().exec("net rpc

Page 7: Apagado remoto de computadoras

SHUTDOWN -C \"Apagando remotamente \" -f -t " +

request.getParameter("tiempo").toString() +" -I " +

request.getParameter("ip").toString() + " -U usuario%contraseña");” como se puede

observar es una instrucción de tipo EXEC y se coloca tal y como si se utilizara en un

programa de Java típico. Lo que hace esta instrucción es capturar la IP de la máquina a

apagar y el tiempo en que se quiera que se apague esta, ya que se apagará una

computadora con sistema operativo Windows desde Ubuntu se requiere colocar el

nomber de usuario y contraseña dentro de la instrucción.

Este es el resultado del comando que se manda cuando está en modo “servidor”

public class ComandUbuntu extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse

response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

out.println("<B>Resultado del comando: </B>");

Process p =

Runtime.getRuntime().exec(request.getParameter("comando").toString());

BufferedReader in = new BufferedReader(new

InputStreamReader(p.getInputStream()));

String line = null;

out.println("<html>");

out.println("<head>");

out.println("<title>Resultado del comando</title>");

out.println("</head>");

out.println("<body

background=\"http://www.tij.uia.mx/vidauniv/publicaciones/deciertomar/images/fondo.

gif\">");

while ((line = in.readLine()) != null) {

out.println("<p>"+line+"</p>");

}

out.println("</body>");

out.println("</html>");

}

finally {

out.close();

}

}

Este servlet es muy parecido al servlet que apaga las computadoras remotamente, solo

que con la diferencia de que en vez de mandar un comando de apagado, en este se

podrán mandar instrucciones directamente a la terminal del servidor lo que permite un

manejo remoto de este. La instrucción que realiza dicha tarea es la siguiente:

“ Process p =

Runtime.getRuntime().exec(request.getParameter("comando").toString());”