ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

【ポケモン GO】PokéVision、PokeWhereが使用不能に!その理由を調査【Pokémon GO】

      2016/08/16

pokevision-pokemongo-map-403-accessed-denied-0000

ポケモンの出現位置を可視化するWebサービス「PokéVision」、同等の機能をアプリにした「PokeWhere」はポケモントレーナー使用必須のものとなっていますが、2016年7月31日午前11時30分現在、どちらも使用不能になり、使えない、繋がらない、ポケモンが表示されないと騒ぎになっています。

「PokéVision」にエラーメッセージは表示されなくなりましたが、ポケモンは1匹も見当たりません。

pokevision-pokemongo-map-403-accessed-denied-00001

「PokeWhere」では、「Game server issues, follow twitter for updates」というエラーメッセージが表示されます。

同じタイミングで「Pokémon GO(ポケモン GO)」のアプリ本体のバージョンアップもあったため、バージョンアップによる仕様変更が関係する説、アク禁を食らった説など諸説あったので調べてみました。

2016年8月8日追記: 代替サービスのリストを作成しました。

Evernote the last sale

総本山GitHubの「PokemonGo-Map」に障害に関する情報提供あり

開発者向けサイトGitHub上の総本山となっているプロジェクト「PokemonGo-Map」内「Issues」の「Unexpected HTTP server response (After Update)」に情報が寄せられていました。

「PokéVision」や「PokeWhere」も「PokemonGo-Map」と同じ仕組みを利用しているはずです。

報告の冒頭は次のようなものです。

2016年7月31日、Unexpected HTTP server response – needs 200 got 403

本来正常に終了する処理に対し、「Pokémon GO(ポケモン GO)」のサーバーから403エラーが返されるようになったということです。

403エラーとはWebサーバーからの応答の一つで、閲覧禁止の通告を意味するもの。

アク禁を食らったという説は当たっていました。

大前提となる事実に触れておくと、「Pokémon GO(ポケモン GO)」の利用規約には、アプリや通信の解析をしてツールを作ること、使うことの禁止がはっきりとうたわれていますので、こんなツール、サービスの存在は、本来許されるものではありません(笑)。

ナイアンティックによるIPアドレスベースのブロックである模様

別の報告者は、このプロジェクトをHerokuで動かしていて、同様のエラーに見舞われた、と動作環境に関する情報を提供。

I’m only having this issue when I try to run the app in Heroku. Locally it works after increasing scan delay to 5 but it doesn’t seem to be reporting 100%.

Herokuとは、Webサービスを動作させるためのクラウドコンピューティングプラットフォームのこと。AmazonのAWSというインフラ上に構築されています。

Herokuは元々Ruby on Railsを対象とした、Amazon Web Services(AWS)のIaaS上に構築されたPaaSで、デプロイには分散リポジトリのGitを利用するなど、Webアプリケーションの開発から公開まで非常に簡単にできる優れたプラットフォームです。

すると、このIssueを上げた元報告者もAWSを使っているとコメント。エラーが出ている別の報告者もAWSを使っていることをコメントしました。

エラーが返されるまでの実際の処理を見てみると、ユーザー認証が正常に終わった後、APIにアクセスするところで閲覧禁止が返されています。

ユーザー認証サーバーがよくダウンしますが、それと今件とは関係がないということになります。

現在に至るも正常に動作する環境あり

同プロジェクトを利用していても、以前と同様、正常な動作をするとの報告もあります。

それは、自宅・会社のPC上で同サービスを動作させた、あるいはマイナーなVPS上で動作させた場合。

VPSもまたクラウドコンピューティングプラットフォームの一種です。

僕も、自分のMacでコンテナ型仮想化環境Dockerを使って動作させてみましたが、確かに動きます。

pokevision-pokemongo-map-403-accessed-denied-00002

ナイアンティックは、主要なクラウドコンピューティングプラットフォームのIPアドレスからのAPIアクセスをブロックしたようで、それから漏れたIPアドレスからのアクセスは正常に終わるようです。

ある人は、「これはバグではない。ナイアンティックが我々の小さなゲームに気づいたのだ」と、意図的なものだと結論付けています。

This is NOT a bug. Niantic has figured out our little game.

IPアドレスがブロックされたと思しきクラウドコンピューティングプラットフォームの例としては、以下のようなものがあります。

  • AWS
  • Heroku (AWS)
  • Azure
  • Digital Ocean

自宅・会社のPC上、マイナーなVPS上ではまだ動作するので、ブロックの対象となったポケモンのスキャン処理だけをこうした環境下のPCで実行し、ユーザーへのサービスの提供には上記のようなクラウドコンピューティングプラットフォームを使うという抜け道の検討が行なわれています。

あるいは、ブロックされたHeroku上で動かしている同サービスの、APIへのアクセス部分にHTTPプロキシを挟んでブロックの回避をテストする人もいます。

考察はナイアンティックがどのようにブロックをしているかにも及んでいます。

単なる対象を決め打ちにしたものなのか、あるいはサーバーへのアクセスパターンを解析して、自動的にブロックリストを増やしていくものなのか。

後者だとすると、まだ大丈夫な自宅・会社のPC上、マイナーなVPS上からのアクセスでも、同じことをやっていてはブロックリストに加えられてしまうかもしれない。ナイアンティックの連中ならやりかねない! こんな危惧もされています。

いたちごっこは始まってしまいました。

「PokéVision」が以前のような形でサービス再開するのは難しいかもしれません。

これからはクライアントベースのポケモンスキャンに?

ただ、「自宅・会社のPC上、マイナーなVPS上ではまだ動作」という抜け道がありますので、これまでサーバー上でやっていたポケモンのスキャンをクライアントサイドに移して再開することはあるかもしれません。

「PokeWhere」のようなアプリも現状は「PokéVision」のようにサーバー側でポケモンスキャンの処理を実施しているため今回の措置の影響を受けていますが、それをクライアントサイドに移すのです。

「PokeWhere」のようなアプリの形態を取るならできることです。

気になるのは、ナイアンティックの措置がIPアドレスベースのブロックということですが、クライアントサイドからのアクセスならIPアドレスは分散しますし、さすがにスマートフォンのIPアドレスをブロックすることはないんじゃないでしょうか。

ということで、サーバーベースのポケモンスキャンWebサービスから、クライアントベースのポケモンスキャンアプリへの移行を待つ局面に入ったのだ、という考察をもって、本稿をとりあえず終えたいと思います。

本来公式のゲームアプリからしかアクセスされない「Pokémon GO(ポケモン GO)」のサーバーに、特定のIPアドレスから膨大かつ不審なアクセスがある状況にあったのですから、こうなるのは時間の問題でした。

トレーナーとしては、収まるところに収まるのを待つほかありませんね。

技術のある人なら、「PokemonGo-Map」を自分の自由になるサーバー(ナイアンティックからブロックされていないIPアドレスを持つもので笑)にインストールして、iOSデバイスならXcodeで「iPokeGo」をビルドしてインストール。Androidなら「Pokemap」をビルドしてインストール。設定から接続先を自分のサーバーに設定するととりあえず凌げそうです。

Evernote the last sale

 - Pokemon GO