Regen Techlog

Web・プログラミングの技術メモ

Suspend on LAN

      2016/08/14

Wakeup on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL)があります。
NIC、マザーボード、BIOS、OSなどが対応している必要がありますが、最近のハードウェアとOSなら大抵の場合利用できます。
典型的な利用状況としては、同じネットワーク内に属する別の端末から起動したいPCのMACアドレスを含んだマジックパケット1をブロードキャスト送信して目的のPCの電源を投入という手順を踏みます。

遠隔からPCを起動させることのできるWoLですが、遠隔からPCの電源を落とす仕組みまでは決められていません。
そこでこの記事では、WoLでPCを起動する場合と同じマジックパケットでPCを終了する仕組みを作ります。
マジックパケットでPCのシャットダウンができれば同じインターフェイスで遠隔からのPCの起動と終了のどちらもできるようになります。

通常ではWoLにおいてターゲットのPCに送るマジックパケットはUDPパケットとして送られます。
PCが起動している間にマジックパケットを受け取っても何も変化はありませんが、
自分宛てのマジックパケットを監視してPCを終了するようにすることでSuspend on LANを実現できます。

今回は前の記事の内容を使ってWindowsサービスとして常駐するように作ってみました。
自分のMACアドレスの取得にはnetifacesパッケージを使っています。

この例では、UDPの9番ポートを監視して自分宛てのマジックパケットを受信したらPCをハイバネートします。
ファイアウォールがある場合はUDPの9番ポートの受信を許可しておかないとPythonがマジックパケットを拾えないので注意してください。

Image based on SNIPICONS by Barseghyan / CC BY-SA


  1. FF:FF:FF:FF:FF:FFに続けて起動したい装置のMACアドレスを16回繰り返したデータを含むパケット 

 - プログラミング

コメントを残す

  関連記事

WindowsでPython Netifacesをインストールする

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたので …

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

「Unable to find vcvarsall.bat」の対処法

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindow …

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

Python小ネタ

Pythonの意外と知られていない小ネタを紹介します。

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …

VC++9.0でOpenMP使用時の注意点

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバー …

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoupやlxml …

Pythonで簡単にWindowsサービスを作る

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Window …