Ver la versión completa : [Ayuda] Wake on Lan (WoL) ¿Cual es el páquete mágico que hay que enviar?
Buenas,
Estoy pensando hacer una aplicación para levantar mi PC... pero claro, necesitaría saber que paquete o que es lo que hay que enviar exactamente al equipo para que se levante (conexion TCP/IP a un puerto en concreto y decirle "¿algo?").
:brindis::brindis:
(conexion TCP/IP a un puerto en concreto y decirle "¿algo?")
Obviamente no, o 1.- tienes que tener una pila de red funcionando, lo que significa tener un sistema operativo funcionando, lo que significa tener el ordenador encendido antes de encenderlo :D 2.- podrías encender el ordenador desde cualquier lugar del mundo lo que supone claramente un peligro.
Tienes que enviar un paquete especial a nivel de enlace. Creo recordar que tenía un número concreto de repeticiones 0xff y después la MAC del equipo destino repetivas otras muchas veces. Para enviarlo, o bien envías directamente el paquete Ethernet (cosa que no puedes hacer desde prácticamente ningún lenguaje de alto nivel) o bien envías mismamente un paquete broadcast UDP con un puerto cualquiera y los datos oportunos.
La verdad es que no recuerdo bien los detalles, tendrás que investigar un poco más :)
Aquí una implementación Java: http://www.jibble.org/wake-on-lan/ Como ves, crea un array con 0xffffffffffff seguido de la MAC 16 veces, lo mete en un paquete UDP y envía a la dirección broadcast de la red al puerto 9. La dirección y el puerto deberían dar igual, porque ni se miran.
Obviamente no, o 1.- tienes que tener una pila de red funcionando, lo que significa tener un sistema operativo funcionando, lo que significa tener el ordenador encendido antes de encenderlo :D 2.- podrías encender el ordenador desde cualquier lugar del mundo lo que supone claramente un peligro.
Tienes que enviar un paquete especial a nivel de enlace. Creo recordar que tenía un número concreto de repeticiones 0xff y después la MAC del equipo destino repetivas otras muchas veces. Para enviarlo, o bien envías directamente el paquete Ethernet (cosa que no puedes hacer desde prácticamente ningún lenguaje de alto nivel) o bien envías mismamente un paquete broadcast UDP con un puerto cualquiera y los datos oportunos.
La verdad es que no recuerdo bien los detalles, tendrás que investigar un poco más :)
Hola Juan!
Al final he seguido investigando y me he ahorrado hasta el codigo jejeje
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);
}
}
private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
byte[] bytes = new byte[6];
String[] hex = macStr.split("(\\:|\\-)");
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}
return bytes;
}
}
Y ya veo jeje, creia que solo con configurarlo en la BIOS valdría, no haría falta una configuración del S.O. con el equipo "arrancado" jejeje. Tengo que mirarlo un poco más ;).
Y bueno con el código fuente me apañare de sobra jejeje.
Muchas gracias! ;) ;)
:brindis::brindis:
^MiSaTo^
31/01/2011, 14:10
Pregúntale a JoJo que los servidores de backup de viejunet los tenemos con WOL.
Tenemos un script que lanza el cron, arranca el PC, hace backup, apaga el PC. Todo ello con WOL y el cron ;)
JoJo_ReloadeD
31/01/2011, 14:14
En linux tienes el comando wakeonlan, solo hay que llamarlo pasandole como parametro la mac de la tarjeta del pc que quieres encender y listo.
Pregúntale a JoJo que los servidores de backup de viejunet los tenemos con WOL.
Tenemos un script que lanza el cron, arranca el PC, hace backup, apaga el PC. Todo ello con WOL y el cron ;)
En linux tienes el comando wakeonlan, solo hay que llamarlo pasandole como parametro la mac de la tarjeta del pc que quieres encender y listo.
Misato, seguramente se haga con lo que dice JoJo_ReloadeD, que es lo mejor... pero quiero que funcione desde otra plataforma... al final necesitas programarlo tu... bueno me pondre con ello ahora que ya se como rula y a ver si para el finde os puede enseñar la aplicación :D :D :D
:brindis::brindis:
^MiSaTo^
31/01/2011, 15:15
Misato, seguramente se haga con lo que dice JoJo_ReloadeD, que es lo mejor... pero quiero que funcione desde otra plataforma... al final necesitas programarlo tu... bueno me pondre con ello ahora que ya se como rula y a ver si para el finde os puede enseñar la aplicación :D :D :D
:brindis::brindis:
Seguramente se haga no, se hace así, es JoJo quien hizo toda la movida XDD
Yo sabía que era un script que se lanzaba desde cron, como te dije, pero no sabía como estaba hecho ;)
Seguramente se haga no, se hace así, es JoJo quien hizo toda la movida XDD
Yo sabía que era un script que se lanzaba desde cron, como te dije, pero no sabía como estaba hecho ;)
jajaja entonces si :D :D :D :D. Bueno lo dicho con el codigo fuente pondre con ello directo ;) ;).
Y además va a ser el mismo codigo prácticamente para 2 aplicaciones similares :rolleyes:.
:brindis::brindis:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.