Created
February 2, 2013 18:52
-
-
Save sergioceron/4698777 to your computer and use it in GitHub Desktop.
WakeOnLan Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Created by IntelliJ IDEA. | |
* User: sergio | |
* Date: 7/12/12 | |
* Time: 05:31 PM | |
* To change this template use File | Settings | File Templates. | |
*/ | |
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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment