Wake on LAN しない!!
Wake on LAN をしたいので MagicSend という古のツールを使っていたが、調子悪い。
起動するときはあるが、起動してくれない時もある。
NIC2枚刺しだと意図した方にパケットが飛んでくれていないのか?
ブロードキャストアドレスを指定しないと駄目なんじゃない?
で、MagicSend のコマンド引数はMACアドレスしか渡さない仕様になっている。ブロードキャストアドレスを指定したいのに。
MagicSend のソースコードを覗いてみるかぁ・・・と思ったらもうサイトクローズしちゃってんじゃん!!
WOL するには Magic Packet を送る
以下のように、UDP で Magic Packet を送ると起動してくれます。
http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html
他にもツールがあるけど、せっかくなので作ってみる
まぁ言語は何でも良いのだけど。
program.cs
class Program
{
static void Main(string[] args)
{
MagicPacket.Send(9, IPAddress.Parse("192.168.101.255"), new byte[]{0x12,0x34,0x56,0x78,0xab,0xcd});
}
}
static class MagicPacket
{
static public void Send(int port, IPAddress broad, byte[] macAddress)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
for (int i = 0; i < 6; i++)
{
writer.Write((byte)0xff);
}
for (int i = 0; i < 16; i++)
{
writer.Write(macAddress);
}
UdpClient client = new UdpClient();
client.EnableBroadcast = true;
client.Send(stream.ToArray(), (int)stream.Position, new IPEndPoint(broad, port));
}
}