LoginSignup
17
24

More than 5 years have passed since last update.

Wake on LANしてみる

Last updated at Posted at 2016-09-01

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));
        }
    }
17
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
24