Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Ligando um computador remotamente usando JAVA

Imprimir
Avaliação do Usuário: / 8
PiorMelhor 




Aposto que você já ouviu dizer que dá para desligar um computador remotamente, certo!? É fácil, basta pesquisar pelo comando shutdown tanto no Windows quanto na maioria das distribuições Linux.

 

Mas e se o que queremos é justamente ao contrário: ligar um computador à distância? A primeira resposta é que é possível, mas é necessário que alguns requisitos sejam atendidos.

 

Você reparou que em muitos computadores (verifique o seu!) mesmo quando desligados as luzes da placa de rede continuam acesas, piscando como se houvesse atividade? Pois é, na verdade, para esses computadores, ainda há atividade de rede, mesmo quando desligados, porém isso só acontece se estiverem conectados à rede elétrica.

 

Esse “fenômeno” indica que a placa-mãe do PC possui a capacidade de Wake-on-Lan (WoL). Essa funcionalidade é que permite, em teoria, que um computador seja ligado remotamente. Digo em teoria porque é preciso configurar na BIOS do equipamento a opção que torna efetivamente isso possível.

 

Ok, chega de papo e vamos testar! Você precisará saber o endereço IP de broadcast da sua rede (normalmente é endereço IP tradicional, porém terminado com 255) e o MAC address (endereço físico da placa de rede) do computador que você quer ligar. Também será necessário ter o JAVA instalado no computador que será utilizado para ligar o outro.

 

Com essas informações em mãos você pode usar esse programa [WakeOnLan.class], desenvolvido em JAVA, adaptado do original em http://www.jibble.org/wake-on-lan/, tanto no seu Windows quanto no Linux, se for o caso:

 

import java.io.*;
import java.net.*;
 
public class WakeOnLan {
    public static final int PORT = 9;    
    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("Forma de uso: java WakeOnLan ");
            System.out.println("Exemplo: java WakeOnLan 192.168.0.255 00:0D:61:08:22:4A");
            System.out.println("Exemplo: java WakeOnLan 192.168.0.255 00-0D-61-08-22-4A");
            System.exit(1);
        }
        String ipStr = args[0];
        String macStr = args[1];
        try {
            byte[] macBytes = getMacBytes(macStr);
            byte[] bytes = new byte[6 + 16 * macBytes.length];
            for (int i = 0; i < 6; i++) {
                bytes[i] = (byte) 0xff;
            }
            for (int i = 6; i < bytes.length; i += macBytes.length) {
                System.arraycopy(macBytes, 0, bytes, i, macBytes.length);
            }
            InetAddress address = InetAddress.getByName(ipStr);
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, PORT);
            DatagramSocket socket = new DatagramSocket();
            socket.send(packet);
            socket.close();
            System.out.println("Pacote Wake-on-LAN enviado.");
        }
        catch (Exception e) {
            System.out.println("Falha ao enviar o pacote Wake-on-LAN: " + e);
            System.exit(1);
        }
    }
    private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
        byte[] bytes = new byte[6];
        String[] hex = macStr.split("(\\:|\\-)");
        if (hex.length != 6) {
            throw new IllegalArgumentException("MAC address inválido.");
        }
        try {
            for (int i = 0; i < 6; i++) {
                bytes[i] = (byte) Integer.parseInt(hex[i], 16);
            }
        }
        catch (NumberFormatException e) {
            throw new IllegalArgumentException("Dígito HEX inválido no MAC address.");
        }
        return bytes;
    }
}

 

Para usá-lo é simples, em uma janela de linha de comando digite:

 

java WakeOnLan

 

Por exemplo:                         

 

java WakeOnLan 192.168.0.255 90-0F-61-09-22-4B

 

ou

 

java WakeOnLan 192.168.0.255 90:0F:61:09:22:4B

 

Você poderá encontrar maiores informações de como isso acontece em http://www.dei.isep.ipp.pt/~andre/documentos/wol.html

 

Adicionar comentário


Código de segurança
Atualizar

You are here: