Amazon Dash ButtonをHackするのはJust do itでしょ、と思って手を出したら落とし穴にどハマった件

# Exective Summary

## そもそもやりたかったこと：
[Amazon Dash Button](https://www.amazon.co.jp/Amazon-JK29LP-毎日一杯の青汁-Dash-Button/dp/B01L2WP6AI)を押して、AWS上の全EC2を停止する。
(利用料が個人レベルでない上に、お小遣いが少ないもので...)

## 前提・制約：
**(甲)** 我が家にはWindows10マシンしかない(Linuxマシンはない、という意味)。
**(乙)** 一方、AWS Dash ButoonをHackするツールとしては、Linux/OS X向けNode.js系ツールが主流らしい（[[1]](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4),[[3]](http://relativelayout.hatenablog.com/entry/2016/12/09/161146),[[5]](http://qiita.com/takustaqu/items/8539b33780c9675c8657),[[9]](https://libraries.io/npm/win-node-dash-button)）。
⇒Amazon Dash Buttonは、ボタンを押すとARPリクエストを送出(ブロードキャスト)する。それを同じLANで待ち受けて検知できるのが[**Dasher**](https://github.com/maddox/dasher)。その検知をトリガーにして任意の処理（WebAPIを呼び出す、等）を起動できる。
**(丙)** 我が家にはAWS Dash Buttonが２つある。それは、[購入商品の指定/設定](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4#%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)を、
　   (A) 意図的に途中でやめてあるモノ
　   (B) 無邪気に最期まで完了した(知らずに済ませてしまった)モノ
　   の2種類だ。
**(丁)** 呼び出されたら「全EC2を停止する」というAPIは、AWS IoT/API Gateway/Lambdaの[サーバレスアーキ](http://qiita.com/coga2000/items/0c777f08c83835c82000)で作成済み。
⇒世間の情報も豊富だし、小1時間程度でできるっしょーとたかをくくる。

## 俺的に考え得た・試した選択肢
①Windows10＋Dasher・・・×
②Windows10＋Bash on Windows＋Dasher・・・×
③Windows10＋Cygwin＋Dasher・・・×
④Windows10＋win-node-dash-button・・・×
⑤Windows10＋Vagrant＋VirtualBox＋Ubuntu＋Dasher・・・○
⑥Windows10＋Docker-Machine＋VirtualBox＋Boot2Docker＋Dasher・・・×
⑦Windows10＋Docker-Machine＋VirtualBox＋Boot2Docker＋Docker＋Ubuntu＋Dasher・・・未

## 紆余曲折の結果が...コレだ...ワン・ツー・スリー...
**⑤Windows10＋Vagrant＋VirtualBox＋Ubuntu＋Dasher**

## 学べる(学べた)コト
・Git
・node.js/npm/node-gyp/node_pcap
・python/pip
・Bash on Windows/Cygwin/Ubuntu
・Docker-Machine/Vagrant/VirtualBox
・Wireshark/tcpdump
・NW/ARP/DNS

## 嵐の後の所感
やってみた結果として、Amazon Dash Buttonは幅広く技術を体験するのに良いテーマだったという実感。
（「[**フェルマーの最終定理**](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E6%9C%80%E7%B5%82%E5%AE%9A%E7%90%86)」と同じ構図？定理の意味の理解はトリビアルだが、その証明を理解するには色々な数学的知識が必要！）
次は『Dash Button(丙)-(B)』のHackを試みる...（方向性としては『[DNSサーバをポジティブに偽装する](http://itpro.nikkeibp.co.jp/atcl/column/14/346926/031700890/)』）
...まあ、[AWS IoT Button](https://www.amazon.com/All-New-AWS-IoT-Button-Generation/dp/B01KW6YCIM)が日本でも発売されたら、それを使うけどね...

# 俺が落ちた落とし穴の各論
以下、詳細：（細々と続く）

# 参考情報
[1] [Amazon Dash ButtonをただのIoTボタンとして使う](http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4)
[2] [node-dash-button@GitHub](https://github.com/hortinstein/node-dash-button)
[3] [Amazon Dashボタンのハックにおける期待と落胆（Wi-Fi編）](http://relativelayout.hatenablog.com/entry/2016/12/09/161146)
[4] [dasher@GitHub](https://github.com/maddox/dasher)
[5] [Amazon Dash Buttonを(正しくない方向で)使ってみた](http://qiita.com/takustaqu/items/8539b33780c9675c8657)
[6] [Dash Button for Node@GitHub](https://www.npmjs.com/package/dash-button)
[7] [node_pcap](https://github.com/node-pcap/node_pcap)
[8] [node_pcapのWindows7対応Folk](https://github.com/jimjibone/node_pcap/tree/ef9aee953dd6a2f42dd777a29d3fddc8d389d330)
[9] [win-node-dash-button](https://libraries.io/npm/win-node-dash-button)
[10] [Windowsでnpm installしてnode-gypでつまずいた時対処方法](http://qiita.com/AkihiroTakamura/items/25ba516f8ec624e66ee7)
[11] [これはすごい！分解とパケット解析で分かったAmazon Dash Buttonの「本気度」 ](http://itpro.nikkeibp.co.jp/atcl/column/14/255608/021500282/)
[12] [これはすごい！Amazon Dash Buttonをプレゼンに使う](http://itpro.nikkeibp.co.jp/atcl/column/14/346926/031400885/)
[13] [これはすごい！Amazon Dash Buttonでツイートできた](http://itpro.nikkeibp.co.jp/atcl/column/14/346926/031700890/)