2015年8月12日水曜日

Yamaha RTX1100 のIPアドレスを通知する方法

Yamaha RTX1100は安いながら結構高性能。
netvolante dnsというdynamic dnsが無料で利用できるので、利用している人も
いるのではないかな。
しかしこのnetvolante-dnsに登録が出来なかった場合、家に帰るまでは家のIPが
分からない…という現象がこの間あったので、なんとかしたいなと思いました。

家のPCから定期的にどこか自分でログが確認できるWebにアクセスするとか、
メールを定期的にチェックさせておくとか、gmailを読むようにしておくとかで
外部からIPを調べることは可能ですが・・・

なにかないかなと思って調べていたらありました。

heartbeat Revision 2

これなんですが、実は生存確認をルーター同士で行う機能。

heartbeat 1は、discardポートを利用するのですが、このheartbeat revision 2は
ポート8512にUDPを送信しているので・・・このポートを監視するサーバー作れば
IPアドレス取れちゃうんじゃない?って思ったのです。
監視するためにはずっと監視するプログラムが必要です。これをデーモンって呼びます。
よくわからないphpで作ってみましたw

[root@www ~]# cat heartbeat2.php
<?php
require_once('Log.php');
require_once('System/Daemon.php');
error_reporting(E_ALL | E_STRICT);
include('./simple_html_dom.php');
mb_internal_encoding("UTF-8");
mb_language("Japanese");
$logger = &Log::singleton('file', 'heartbeat2.log', 'heartbeat2', null, PEAR_LOG_DEBUG);
$options = array( 'appName' => 'heartbeat2', 'appDescription' => 'Yamaha Heartbeat 2 Logger daemon', 'appDir' => dirname(__FILE__), 'usePEARLogInstance' => $logger, 'logVerbosity' => '7',);
System_Daemon::setOptions($options);
System_Daemon::start();
while (!System_Daemon::isDying()) {
        //echo "daemon running...";
        $result = listenheartbeat();
        if ($result != "") {
                $html=str_get_html($result);
                $ip = $html->find('address',0)->innertext;
                $name = $html->find('name',0)->innertext;
                $file = '/var/www/html/home.html'; //これはWebから確認するためのURL及びIP変更確認用一時ファイル兼用
                $current = rtrim(file_get_contents($file),"\n");
                //IPが変わったら通知する
                if ($current != $ip ) {
                        $title = "$name のIPが $ip に変わりました";
                        $body = "新しいIPは $ip です"."\n\n" . "http://hogehoge(サーバー名)/home.html\n\n" . "旧IP: " . $current . "\n\n" . date("Y-m-d H:i:s");
//                      echo $body;
                        file_put_contents($file, $ip);
                        $title = mb_convert_encoding($title,"JIS");
                        $body = mb_convert_encoding($body,"JIS");
                        System_Daemon::info("$name: IP changed from $current to $ip");
                        if (!mb_send_mail("メアド@gmail.com(送信先)", $title, $body , "FROM: heartbeat@xxxxxxxxxxxxxxxxxxxx.com(FROMメールアドレス)")) {
                        System_Daemon::warning("メールの送信が失敗しました。");

                        } else {
                        System_Daemon::info("メールの送信が完了しました。");
                        }
                }
        }
        System_Daemon::iterate(1);
}
System_Daemon::stop();

function listenheartbeat() {
        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_bind($socket, 'xxx.xxx.xxx.xxx(リッスンするIPアドレス)', 8512);
        $from = '';
        $port = 0;
        socket_recvfrom($socket, $buf, 500, 0, $from, $port);
        return $buf;
}
?>



という感じに適当にデーモンを作って起動させる。

php ./heartbeat2.php

System_Daemon PEARモジュールがない場合は次のようにしてインストールする。
pear install System_Daemon

simple_html_domはここからダウンロード

次はYamahaの設定

heartbeat2 myname RTX1100(RTXの名前)
heartbeat2 transmit 101 auth testkey heartbeat2.phpが動いているサーバーのIPアドレス
heartbeat2 transmit interval 101 30
heartbeat2 transmit enable 101

こうすることによって、デーモンで動いているhearbeat2.phpの変数$nameにはmynameが入る。


Win10にアップグレードしたX220のTrackpointセンタースクロールをMetroアプリでも動かす方法

X220をWin10にアップグレードした。

いろいろと問題が発生している。再起動時に固まるとか…
一応使えているのだが、Metroアプリで、Trackpointのセンタースクロールが動かない問題がすごく不便だった。

とりあえず治せたのでやり方:

http://support.lenovo.com/us/en/downloads/ds103517



このドライバをダウンロード、j5g204ww.exeを実行する。

C:\DRIVERS\WIN\UltraNavに解凍される。


次に[デバイスマネージャー]を起動する。



[マウスとそのほかのポインティングデバイス]の中に [PS/2 Trackpoint]があるので、右クリック。



[ドライバの更新]→[コンピュータを参照してドライバーソフトウェアを検索します(R)]



→[コンピュータ上のデバイスドライバーの一覧から選択します(L)]



→[ディスクの使用...]




32bitの場合[C:\DRIVERS\WIN\UltraNav\WinWDF\x86]
64bitの場合[C:\DRIVERS\WIN\UltraNav\WinWDF\x64]

を選択、または入力する中にあるどれかのinfをクリック→[開く(O)]→[OK]
[Synaptics Pointing Device]をクリックする。[次へ(N)]をクリック。


警告が出るので[はい]を選択。





再起動すれば、スタートメニューでもスクロールができるようになる。

Source: answers.microsoft.com