【ソフトウェア開発】MagicPacket


突然ですがBPS – バトルプログラマー シラセって観たことあります?
あるいは、パトレイバーの劇場版1作目。

この二つに共通するシーンなんですが、WANからLANのコンピュータの電源を入れるシーンがあります。

BPSは、1話で携帯電話(ガラケー)から自宅のPCを起動してますし、パトレイバーでは、シバシゲオ整備員の自宅(LAN)から特車二課のサーバー(別のLAN内)を起動させています。

で、今の技術なら上記のように「WANからLAN内のPCの電源をリモートで入れられるんじゃね?」と思ったのがきっかけで、色々調べ始めました。

なんでこんなことを思いついたかというと、私はIT技術勉強会に良く参加しているのですが、ノートPCのスペックが貧弱なので、VPN経由で自宅のマシンをリモートデスクトップで操作してるんですね。

で、とある勉強会の日の朝、デスクトップPCの電源を入れ忘れたことを定時前に気付いたのがきっかけです。
「リモートで電源入れられれば便利なのに。。。」と。

色々調べてみると、LANウェイクアップやMagicPacketという単語が出てきました。

前者はWindows系のサーバーの技術らしいのですが、MagicPacketの方はWindows2000の頃からある技術と判明。詳しいことは以下の記事から情報を得ました。

http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html

簡単にまとめると、LANのマシン全体にブロードキャストで「お前(MACアドレス指定)、起動しろ!」というパケットを投げて、該当するマシンが返事の代わりに電源をONにするという技術です。

記事上では、OS、NIC、BIOSが対応している必要があると書かれていますが、今回は電源をS5(完全OFF)→S0(完全ON)にするので、NICとBIOSが対応している必要があります。

上記の記事に自分のマシンが対応しているか調べる方法が載っていますので、興味のある方は調べてみてください。
NICはWindows上のデバイスマネージャから確認できますし、BIOSはOSが立ち上がる前にDELキーなどを押下※していればBIOSメニューが開けます。

※押下するキーはPCのメーカー、機種で異なるので注意してください

幸い、私のメインPC(Mk-Ⅱ)はNIC、BIOS共に対応しているので、記事にあるWOLControllerを使って起動させてみました。(同一LAN上)
すると起動するではありませんか!(調べていたので分かっていましたが。。。)

で、考えたのですが、私の自宅にはサーバーがあります。
こいつは、WANとLANの境目(DMZ)に配置しているので、うまく使えば中継役を担えます。
構想を簡単に図にしてみました。

構成図

サーバーを中継役として、WANからはPHPが受け口となって、サーバー内部で実行形式ファイルを実行→MagicPacketをLAN内に送出するという仕組みです。

この構想を立てるまで約30分、そしてPHPとEXE(Linuxで実行形式ファイルをなんて呼ぶのか知らないのでEXEと呼びます)を作るのに2時間弱。

できました。

PHPファイルのURLは公開できませんが、スマホやガラケーなどの3G回線からLAN内のデスクトップPCを起動することができました!
これで起動し忘れも防止できますし、朝から定時までのPCのアイドル運転もしなくて済みます。

シャットダウンはどうするかというと、リモート操作でOS上で落とします。Windows系の場合は、以下のバッチファイルを作成しておくと便利です。
リモート操作の場合、シャットダウンという項目が無くなっているので。

shutdown -s -t 0

需要があるか分かりませんが、今回作成したMagicPacket送出の仕組み(PHPとLinux実行形式ファイル)はzipで固めて公開します。

たぶん、ブログ上部のバーに「Download」などといった項目を追加するので、興味のある方はのぞいてみてください。

どこかのメーカーでエアコンがスマホから制御できるという機能があったかと思いますが、電源ON/OFFがあれば、MagicPacketが使われているかもしれませんね。
個人でもサーバーを持つ時代ですから、MagcPacketが家電にも対応されれば、スマホから電源制御が可能になって面白いと思うのですが。。。

この機能の実現によって、もう一つメリットが得られました。
それは、PT2の起動&外部からの予約です。

私のメインPCにはPT2というTVチューナーが付いており、TvRockというソフトを使うことで外部から予約することができます。
メインPCはサーバーではないので、通常は電源OFFです。
そこで今回作成したMagicPacketでPCを起動→メインPCの予約機能に端末からアクセス→予約という流れができるようになりました。

まだTvRockは未導入ですが、また一つPT2の有用性が増しました。

【追記:2013/07/27】

Download用ファイルの準備が整ったので、Downloadページを公開しました。
以下のURLになります。

http://sivaexstrage.orz.hm/blog/?page_id=758

【追記:2013/07/27 16:35】

もちょい氏からの希望もありましたので、ソースコードもzipに同梱しました。
大したことはしていませんが、こちらは自由に改変していただいて構いません。


この記事をシェアする

    Mask_Siva

    北の試される大地に生息しているSEです。
    楽しみながらプログラムを作ったり、ゲームで遊んだりしています。

    1. もちょい 2013.07.27 2:28am

      WakeOnLanって結構枯れた技術だと思うけど、意外にも知らなかったのね。
      PHP+EXEの公開を楽しみにしてます^^
      Cの部分は当然ソースも公開だよね??w

      • MaskSiva 2013.07.27 4:40pm

        確かに枯れた技術だと思うけど、少し前に法律が対応していないことで話題になったエアコンの電源ON/OFFのAndroidアプリとかこの辺の技術を使ってるんじゃないかな?と思いながら楽しんで調べられました。

        PHP+EXEは先ほど公開しました。
        C部分は大したことしてないから公開するつもりはなかったけど、公開しちゃいますかw

        ソースコードもzipに同梱する形で公開しました。
        大したことしてないけど、興味があれば覗いてみてください。

    HTMLタグは利用できません

    Advertising

    楽天 新品/中古ゲーム販売 通販ショップの駿河屋

    BGM

    機動戦士ガンダムUC オリジナルサウンドトラック
    iTunes Music

    12 ZERO GRAVITY -澤野弘之

    ↓の再生ボタンで再生できます

    色々な楽曲を試聴したいなら
    >>>こちら<<<

    Calendar

    2024年11月
     12
    3456789
    10111213141516
    17181920212223
    24252627282930

    Archive

    My WIsh List

    Amazonで気になっている物をまとめています。

    「これは良かった!」「こっちの方がいいよ!」というものがあれば、教えてください<(_ _)>

    https://amzn.to/3oof0rZ