Wake on Lan

E aí pessoal, blz?

Vi um artigo esses dias sobre Wake on Lan e fiquei interessado no assunto.

Claro, que se é possível ligar um computador, também é possível desligá-lo, correto?

Alguem aqui poderia mostrar qual o raciocínio a ser feito (e se possível, o código pra exeplificar) para desligar o PC?

Para ligar o código é este:

[code]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("Usage: java WakeOnLan <broadcast-ip> <mac-address>");
        System.out.println("Example: java WakeOnLan 192.168.0.255 00:0D:61:08:22:4A");
        System.out.println("Example: 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("Wake-on-LAN packet sent.");
    }
    catch (Exception e) {
        System.out.println("Failed to send Wake-on-LAN packet: + e");
        System.exit(1);
    }

[/code]

Para desligar é onde o bicho pega ;X

Valeu pessoal!

essa função de ligar o pc remotamente vai depender da placa de rede utilizada.
para desligar já é mais direcionado ao SO utilizado.

No caso do Windows, tem uma idéia de como será?

Conectar em alguma porta aberta; obter um cmd; executar um “shutdown -s”.

Trivial depois da parte “Conectar em alguma porta aberta; obter um cmd;”

O código acima, no primeiro post, está correto, não está?

Sim, está correto.

Só não faz o que voce quer.

@marky

Sou meio iniciante no meio, por isso estou perguntando coisas que parecem básicas… :oops:

O que esse código irá executar?

Esse código envia um pacote UDP com o comando de Wake on lan. Se uma máquina estiver configurada para aceitar, ela recebe o pacote e liga.
Note que isso implica em dizer que a máquina deixará sua placa de rede ligada. Muitos computadores vem com essa opção desligada por padrão para evitar o consumo desnecessário de energia.

Como o pessoal falou (e o próprio nome do protocolo indica) não existe “desligar on lan”. A ação de desligar envolve pedir ao usuário que salve os dados, fechar aplicativos corretamente, recursos, etc. Como pode haver perda de informação, alguns SOs suportam esse recurso, desde que você seja administrador da rede.

Entendi, até porque não há Sleep on Lan :lol:

Brincadeiras à parte, então o código então enviar sim, um UDP ?

Compreendo que depende da configuração da placa de rede com a MB…