外部から社内のパソコンへWake on lanを実装したときのまとめ(サーバー側)

外部からリモートデスクトップするためのwake on lanを実装したときのサーバー側のまとめ

前提資料

必要事項

・外部から見れるサイトを社内にサーバーを立てれること
※Web UIとかログイン認証、sslは別途でやってね

概要

前提として下記の設定が必要になります。(マシンによって異なる)

8e70e928d849800df74cd206b0d90d74.png

今回はphpでWake on lanを実施する部分のみ

wakeonlanにはMAC Addressが必要だが、Ip Addressしかわからない人がいるのでコマンドを使って探す処理を実装

***.

//ip address → mac address
if(isset($ip_address && $ip_address != ""){
    $mac = "";
    $pcs = shell_exec("nmap -sP {$ip_address} ");
    $pcs = shell_exec("arp -a");
    $pcss = explode("n",$pcs);

    foreach($pcss as $value){
        if(strripos($value,$ip_address !== false){
            if(preg_match("/([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}/",$value,$match) === 1){
                $mac = $match[0];
                break;
            }
        }
    }
    if($mac != ""){
        $ping = " {$ip_address} → MAC address {$mac}";
    }else{
        $ping = "get faild";
    }
}

その逆

***.php
//mac address → ip address 
if(isset($mac_address) && $mac_address != ""){
    $ip = "";
    #Need to change *.*.*. (192.168 or 172.16 or ....)
    $pcs = shell_exec("nmap -sP 192.168.6.* ");
    $pcs = shell_exec("arp -a");
    $pcss = explode("n",$pcs);

    foreach($pcss as $value){
        if(strripos($value,$mac_address) !== false){
            if(preg_match("/(([a-zA-Z0-9.]+))/",$value,$match) === 1){
                $ip = substr(substr($match[0],1),0,-1);
                break;
            }
        }
    }
    if($ip != ""){
        $ping = "MAC address {$mac_address} → IP address {$ip}";
    }else{
        $ping = "get failed";
    }
}

また上記で参照できないことがあるので下記をcronで走らせる
*.*.*.は192.168.1や192.168.2、172.16.3等に環境に応じて変える

***.php
for a in `seq 1 254`; do ping -c 1 -w 0.5 *.*.*.$a > /dev/null && arp -a *.*.*.$a | grep ether; done

MAC Addressがわかったら下記でバッチに引き数を渡す

※batchの実行ユーザーに気を付ける事、この場合はapacheのユーザーを使用して実行

***.php
#run user apache
shell_exec("wakeonlan.sh ".$mac_address);
wakeonlan.sh
#!/bin/sh
echo 'apache' | sudo -S ether-wake $1
echo "$1 start"

その後の起動確認は下記で実装

***.php
$res = shell_exec("ping -c 4 -W 5 ".$ip_address);
$array = explode("n",$res);
if(strripos($res,'0 received') === false){
    $ping = "boot success";
}else{
    $ping = "boot failed";
}

まとめgithub:https://github.com/abotkugyu/wakeonlan

  • コメント

    1. 匿名希望
      2017/08/23(水) 00:03:38

      推奨パソコン使って630出すようなkszkサーバーはまだ改善してなかったの?おま環じゃないよね?5週目中だったのに時間とブースト返してくんない?

    2. 匿名希望
      2017/08/23(水) 00:03:38

      HP制作は高校生には敷居高いかもだがサーバー1台ぐらい自作できるだろ。パソコン部って無かったか。

    3. 匿名希望
      2017/08/23(水) 00:03:38

      今までアンドロイドの通信はftpサーバー使ってたけど、winのローカルネットの共有のほうが簡単にデータやり取りできた。こんどからこっち使おう。なんか便利そうなの入れようとしてもいろんな規格があるし、エラー吐きまくるわでパソコンって難しい

    4. 匿名希望
      2017/08/23(水) 00:03:38

      TmBOX閉鎖されたんですね…バンブラーさんはパソコンお持ちでない方も多いので、コラボとかで重宝してたんですけど、サーバーの利用期間が切れたのなら仕方ないですね。

    5. 匿名希望
      2017/08/23(水) 00:03:38

      DHCPサーバーのせいでP2Pの検出の時に知らされるIPアドレスがルーターのIPアドレスになってる気がする。DHCPサーバーの機能を切れば個人のパソコンのIPが検出される?

    記事に戻る

関連記事