Amazon Dash Buttonを使ってパソコンを起動した

僕のメインPCがノートPCに周辺機器を無限に差しまくったやつで、ノートPC部分が謎の棚の真ん中に置いてあるせいで電源ボタンを押すためにしゃがんでノートPCを半開きにして手を伸ばす必要があって最悪だという話はTwitterで無限にしたと思うんですけど、Amazon Dash Buttonとかいう押すと電波が飛んでAmazonが商品を送る謎ボタンで色々と出来るみたい話を聞いて最近プライム会員にもなったしやるかみたいな感じでポチったところから話は始まります。

まず、リモートで起動するならWoLだよなみたいな感じになって、無線だとWoL出来ないので有線でLANを構築する必要があったのですが、物理的に有線にするのは不可能でした。じゃあイサコンだよなと思ってメルカリ見たら無線LANルータが手頃感高くて良かったので買いました。これを親機にして現在親機だった子を子機にします。

はい届いた pic.twitter.com/3NP1UNExpV

— ぱくとま (@pakutoma) 2017年1月19日

Tweetを貼れることに最近気がついたので今回の記事ではこんな感じに貼りまくると思います。

イェーーーーーイ!!!!!! pic.twitter.com/FtbIoR6lp2

— ぱくとま (@pakutoma) 2017年1月18日

色々と届いたのでやり始めます。
僕はPythonもRubyもPerlも書けないのでいつものようにNode.jsでやります。
Node.jsも書けませんけど、Cを書いてlibpcapとsys/socketとで楽しいダンスを踊るよりはマシです。
記述量があまりに違いすぎる。
Qiitaを流し読みした結果node-dash-buttonってライブラリを使うとよしなにしてくれるらしいのでnpmで入れて適当に公式のreadme読みながら適当に使います。この辺の適当感がスクリプト言語は非常に良いですね。やりたいことがほんの数行で終わるので普段やっていることがバカバカしくなってきます。
WoLはこれもまたnpmからwake-on-lanってライブラリ引っ張ってきて使うとなんか出来ます。秒です。

秒で終わりました。

Amazon Dash 電源ボタンです pic.twitter.com/0LmAlTW0O7

— ぱくとま (@pakutoma) 2017年1月20日

本当はWindows10の高速スタートアップのせいでWoLでS5ステートから起動してくれないとか色々あってコード書いてる時間の100億倍くらい時間かかってるんですが実質秒なので秒です。

終わった感を出してたところで、ボタン押す時にAmazonから通知が来てうざいなとTwitterで言ってたら

@pakutoma パケットモニタリングしてみてほしい

— 音船 (@sonarship) 2017年1月20日

と言われたのでパケット解析しようということになりました。僕はネットワークスペシャリストなのでパケット解析もお手の物です。嘘です。

パケット解析とかやったことなかったのでとりあえずPCにwiresharkを入れてパケットを見ました。ボタンを押すとARPが飛んできていて、その少し後にマジックパケットが飛んできてああすごいなあ動作通りだなあという感慨を得ました。何も得られていません。
何も得られませんでしたが、とりあえずまともにやると拾えないことが分かったのでどうにかすることにします。紆余曲折を経た後に多分DNSを参照しているだろうということで自宅鯖に立っているdnsmasqのログを出力させて結果を見ることにしました。
これが大当たりで、Amazon Dash ButtonのIPからdash-button-jp.amazon.comのDNS正引きを行っていることが分かりました。
とりあえずdash-button-jp.amazon.comを自宅鯖に向けてtcpdumpで見たら、443に向けてTLSで何か通信しているらしいです。暗号化されているので無理だなという雑な結論になってこれにて私の旅は終了です。
ちなみに、apacheではアクセスログが残らなかったり、FF外の方から普通のTLS通信っぽくないという話を聞いたりしたので少なくともRESTfulではなさそうです。何らかの通信を何らかの方法でしているのでしょう。僕は興味がありません。

このへんの話はQiitaにも書いたしそっちの方が詳しく書いた気もします。

そんな感じでDNSを雑に書き換える形でAmazon Dash Buttonは完全にAmazonとの通信手段を失い、単なる電源ボタンとして私に酷使されることになったのでした。(こういう「巨大組織の製品を鹵獲して日用品として使う」みたいな感じのもの良いよね、インターステラーの最初の方みたいな感じ)
あ、そういえばAmazonからの通知はAmazonアプリから切れるらしいです。まあ楽しかったしいいけど。

おわり