- 出版社/メーカー: Amazon
- 発売日: 2016/12/05
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 出版社/メーカー: Amazon
- 発売日: 2016/12/05
- メディア: エレクトロニクス
- この商品を含むブログを見る
さて、昨年末に日本で発売された Amazon Dash Button ですが、「どうやらハックできるらしい」ということを知って、買ってみました。
本当は、12月に買ってあったのですが、色々忙しくて三ヶ月ほど放置していましたが、「エマージェンシーコールが欲しいな」と思い、簡単なハックをしました。
「おかーしゃーん?」チカ母さん(@Chika_mother)の姿が見えなくて泣く娘のチカちゃん。母の姿を見つければすぐに、ほっとするけれど…。すぐに駆けつけることが今はできる。でも…https://t.co/pWIdIOrQdG pic.twitter.com/mx78bq7WYl
— 赤すぐ みんなの体験記 (@akasugu_taiken) 2017年3月21日
直接のきっかけはコレ。
東京の自宅に四歳の息子がいて、自分は酒田に居ることが多いため、母親(かみさん)が倒れると、この漫画の状況になります。
これは泣ける。
ということで、今回実現したい仕様は「Amazon Dash Button が押されたら特定のアドレスにメールが届く」です。
簡単そうですね。
主に参考にしたのは、この記事です。
実際には、こちらの記事でも使用している「node-dash-button」というライブラリを使用しました。
動作原理
上記の記事にもありますが、簡単に動作原理を説明します。
前提
Amazon Dash Button は、初期設定でWifiの接続設定を行うようにできており、ボタンを押すと、インターネット経由でアマゾンに1-Click注文処理を投げます。node-dash-buttonは、この時の通信を「傍受」して別の処理を行います。Amazon Dash Button には一切修正を入れずにButtonが押された時の処理を定義できます。ただし1-Click注文を未設定状態にしておかないと、「注文されます」(^^;
動作
- Amazon Dash Button を押すとネットワークの接続を確認するため信号(arp probe)が出ます
- この信号を監視するサーバーを立てておき、この信号をリアルタイムに検知します
- MACアドレスによって、特定の Amazon Dash Button であることが判定可能なので、特定のMACアドレスから信号が来たら定められていたアクションを行います
原理は簡単で、「node-dash-button」は、dash-buttonという名前がついていますが、他のネットワーク機器(スマホやPC)でも、接続されたときにアクションを定義できるはずです。^^;
Amazon Dash Button の設定
Amazon.co.jp ヘルプ: Dash Buttonの設定を管理する
こちらの設定ページの通り設定します。ただし、最後の商品選択のところで、処理をやめて放置します。^^;
最後まで設定してしまうと、もちろん 商品が届きます 。
と、ここまで書いてて思ったのですが、「商品が届いてしまう」という副作用を無視すれば、アマゾンから注文メールが届くので、無改造で「エマージェンシーコール」として機能するな。
子供に持たせる場合、誤操作で商品が届くとちょっとアレですが。^^;
Amazon Dash Button のMACアドレスを知る
Amazon Dash Button のMACアドレスを調べるのはそこそこダルいですね。
僕は、node-dash-buttonを起動して、表示されるMACアドレスを使いました。
以下のような手順です。
git clone https://github.com/hortinstein/node-dash-button.git
cd node-dash-button
npm install
sudo /path/to/node/node/bin/node bin/findbutton
sudoが必要なので、nodeのパスを絶対パス指定しないと動かないと思います。
こんな感じのログが表示されます。
Possible dash hardware address detected: 34:d2:70:6f:e5:c0 Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: 34:d2:70:6f:e5:c0 Manufacturer: unknown Protocol: arp
Possible dash hardware address detected: ac:63:be:9a:29:3d Manufacturer: Amazon Technologies Inc. Protocol: udp
Possible dash hardware address detected: ac:63:be:9a:29:3d Manufacturer: Amazon Technologies Inc. Protocol: arp
ボタンの機体によって、プロトコルの表示が違うのは謎です。
実施
さて、準備はこんなもんなので、プログラムを書いて「node-dash-button」と「Nodemailer」を使って、ボタンが押されたら特定のアドレスにメールが届くようしてみました。
注意点としては、ARPを監視するため、 管理者権限で実行しないといけない ということです。
そして、ARP監視に、「libpcap-dev」を利用するため、MacやWindowsでは動かないと思います。VMを立てるか、Linux(Debian系が良いと思う。僕はUbuntuでやりました)を利用しましょう。
あと、Nodemailerが、Node.js V6.x以降でないと動かないので、パッケージから入れたnode.jsでは動かないと思います。本家のサイトから最新版をDLしてきて入れましょう。
npm install
sudo /path/to/node/bin/node main.js
とするだけで動きます。
main.jsの中身も相当ベタに書いてあるので、難しいことはないと思います。^^;
fromのメールアドレスや、Amazon Dash Button のMacアドレスの部分は書き換えてください。
一応、動作確認したときに届いたメールのスクショを貼っておきます。