Fork me on GitHub

Java Magic+packetを送信する

  • Jul 11, 2008

categoryプラグインは存在しません。

Wake On LAN用のMagic PacketをJavaから送信する。

Javaと言いながら、例によってGroovyです。

環境

コード

まずはコマンドラインの解析。

def int PORT = 9

def cli = new CliBuilder()
cli.h(longOpt: 'help', 'usage information')
cli.i(argName: 'networkInterface', longOpt: 'interface', args: 1, required: true, 'MAC address of network interface(IPv4)')
cli.b(argName: 'broadcast', longOpt: 'broadcast', args: 1, required: true, 'Broadcast address')

def opt = cli.parse(args)
if (!opt) return
if (opt.h) cli.usage()

MACアドレスを取得

String mac = opt.i.replaceAll("-", "").replaceAll(":", "")
byte[] macBytes = new byte[6]
for (pos in 0..5) \{
    macBytes[pos] = Integer.valueOf(mac.substring(pos*2,pos*2+2), 16)
\}

パケットデータを構築

byte[] data = new byte[6 + 16 * 6]
for (i in 0..5) \{
   data[i] = 0xff
\}
for (i in 1..16) \{
   System.arraycopy(macBytes, 0, data, i * 6, 6)
\}

データ送信

InetAddress address = InetAddress.getByName(opt.b)
DatagramPacket packet = new DatagramPacket(data, data.length, address, PORT)
DatagramSocket socket = new DatagramSocket()
socket.send(packet)
socket.close()

println "Wake-on-LAN packet sent."