Meraki MR を導入すると、簡易的な Connected Mobile Experience (CMX) の機能がダッシュボードに付いてきますが、そのデータをダッシュボードで詳細に解析することはできません。「オーガナイゼーション」>「ローケーション分析」より、設置したアクセスポイントがどのくらいの端末を検知し、それらの端末がどの程度滞在したのか、また再訪問したのかが確認できます。しかし、これらは総合された情報なので、どの端末が頻繁に訪れているのかといった詳細な情報を抽出することはできません。このような解析を行いたい場合、Scanning API でMeraki ダッシュボードから外部のサーバに情報を出力し、解析する必要があります。今回は試しに Scanning API のデータを受信してみました。
環境
下記の機器やツールを使用し環境を構築しました。
- MacBook Pro (macOS 10.13.3) もしくは Windows 10
- Python 3.6.4
- 今回使用するサンプルコードが Python で書かれているため、Python が必要になります。
- Flask
- サンプルコードは Python の Flask というライブラリを使用します。
- ngrok
- Scanning API は Dashboard API とは異なり、Meraki Dashboard が外部サーバにデータを定期的に出力します。つまり、その外部サーバはパブリック Internet Protocol (IP) がなければ、Meraki Dashboard のデータを受信することはできません。しかし、今回のように Scanning API を受信するためだけにパブリック IP アドレスを取得したり、ルータにポートフォワーディングを設定するのは手間がかかります。そこで ngrok が役立ちます。Ngrok というサービスを利用すれば端末がプライベート IP アドレスを保持していても、特定のセッションを ngrok サーバとトンネルを確立し、ngrok のパブリック IP アドレスを利用することになります。Ngrok のパブリック IP アドレスに届いたパケットは全て端末へ転送され、端末がそのセッションに対して送信したパケットはトンネルを通じて ngrok サーバから送信されます。何かを試したいとなった場合は ngrok が非常に便利です。
- cmxreceiver-python
- これがサンプルコードになります。Command Line Interface (CLI) から動作させる必要があります。Web ページからアクセスすると (HTTP GET)、Scanning API で設定したバリデータ値が表示されます。ダッシュボードからは HTTP POST でデータが送信され、それに含まれたデータが CLI に出力されます。
MacOS と Windows とでは使用できるパッケージマネージャが異なるので、準備する環境が異なります。MacOS では Brew を使用し、Windows では Chocolatey を使用します。
MacOS 編
1. Brew をインストール
パッケージマネージャが端末にインストールされていない場合は、brew をインストールすることをおすすめします。ここに書かれている手順に従ってインストールしてください。インストール後は CLI から brew を実行できるようになります。
MacBook-Pro:~ User$ brew Example usage: brew search [TEXT|/REGEX/] brew info [FORMULA...] brew install FORMULA... brew update brew upgrade [FORMULA...] brew uninstall FORMULA... brew list [FORMULA...]
2. 各種パッケージをインストール
Brew を使用し python と ngrok をインストールしてください。
brew install python brew cask install ngrok
Python をインストールすると、python のパッケージを管理する pip もインストールされます。Pip を使用し、flask をインストールしましょう。
pip3 install flask
ここで、cmxreceiver-python もダウンロードしておきます。GitHub の 「Clone or download」から zip ファイルとしてダウンロードしてください。ダウンロード後フォルダを展開します。
Windows 編
1. Chocolatey をインストール
Chocolatey はここからインストールが可能です。コマンドプロンプトを管理者として実行し、Chocolatey のページに記載されているコマンドをペーストしてください。インストールが終了したら、Windows マシンを再起動する必要があります。
2. 環境を整備
再起動後、再度コマンドプロンプトを管理者として実行し、下記のコマンドを実行します。
choco install ngrok choco install python choco install pip
Pip インストール時にエラーが発生しますが、特に気にせずに進めます。次にコマンドプロンプトを通常通り立ち上げ、flask をインストールします。
pip3 install flask
そして、cmxreceiver-python もダウンロードしてください。GitHub の 「Clone or download」から zip ファイルとしてダウンロードできます。ダウンロード後フォルダを展開します。
以上で環境は整いました。
設定手順
1. Scanning API を有効
「ネットワーク全体」>「一般」>「ロケーションとスキャン」より Scanning API を有効にできます。「アナリティクス」と「スキャン API」を「有効」にします。「ポスト URL」は 6 で設定します。バリデータ値は次の手順で使用するので、どこかに記録しておいてください。
2. Cmxreceiver-python を起動
2 で zip を展開したフォルダへ CLI で移動してください。私は自身の Download というフォルダに展開したので、そこまで移動し、下記のコマンドでスクリプトを起動します。バリデータ値は 1. Scanning API を有効で記録したものに置き換えます。シークレットはパスワードみたいなものです。私は Cisco123 を使用します。
python3 cmxreceiver.py -v <バリデータ値> -s <シークレット>
127.0.0.1:5000 へブラウザでアクセスすると、設定したバリデータ値を確認できます。
3. Ngrok を起動
Ngrok も CLI から起動させます。Cmxreceiver がポート 5000 で起動しているので、ngrok でポート 5000 をマッピングします。
ngrok http 5000
上記を実行すると下記のような画面が表示されます。Forwarding に表示されている HTTPS のリンクにアクセスすればバリデータ値が表示されるはずです。このリンクへスマホからアクセスしてもバリデータ値を確認できます。
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 7 hours, 59 minutes Update update available (version 2.3.25, Ctrl-U to update) Version 2.3.18 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://91bfe797.ngrok.io -> http://localhost:5000 Forwarding https://91bfe797.ngrok.io -> http://localhost:5000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
4. ダッシュボードを設定
「ネットワーク全体」>「一般」>「ロケーションとスキャン」にて 3. Ngrok を起動の HTTPS のリンクを設定します。シークレットは 2. Cmxreceiver-python を起動で設定したものを使用します。
少し待つと、cmxreceiver を起動させた CLI で AP が検知した Wi-Fi と Bluetooth 端末のデータが表示されます。