Charlesを使ってスマホアプリ(iOS)のUAを調べてみた


はじめに

ここ最近のスマホアプリには、Webブラウザの機能を実装したものが少なくありません。
(“スマホアプリ内で立ち上がるブラウザ「アプリ内ブラウザ」”の機能は「WebView」というコンポーネントを用いて実装されています。)

昨今のWebサイト、サービス運営に於いて、「通常のWebブラウザ」からのリクエストなのか「アプリ内ブラウザ」からのリクエストなのか判断しなければいけないケースがあります。

この判断にはご存じ、”UserAgent”(以下UA)を用いるわけですが、実際に「通常のWebブラウザ」や「アプリ内ブラウザ」がどういったUAでリクエストを送信しているのか、調査に利用するツール「Charles」の設定をご紹介しながら、スマホアプリのUAを見ていきたいと思います。

Charlesの設定

Charlesについて

CharlesはPC上に仮想のHTTPproxyを立ち上げ、端末の通信をモニタリングし、リクエストやレスポンスの内容を書き換えたりすることができます。

有償のツールですが、試用版(30日)があります。
なお、試用版は30分ごとに強制終了されてしまう制約があります。

Charlesは以下のサイトからダウンロードできます。
http://www.charlesproxy.com/
なお、記事執筆時の最新バージョンは3.10.2となっており、本記事ではバージョン3.10.2を使用します。

Proxyの設定(PC側)

以下の手順でProxyの設定を行います。

【Proxy】>【Proxy Settings…】を選択すると
【Proxy Settings】のポップアップが開きます。
【Port】を【8888】に指定します。(おそらくデフォルト設定の状態)

ここで設定したPortを使い、通信を監視します。
スクリーンショット 2015-08-12 17.20.55

スクリーンショット 2015-08-11 0.58.49

なお、デフォルトではhttpsのモニタリングが無効になっているため、以下の手順でSSLを有効化します。

【Proxy】>【SSL Proxy Settings…】で【Enable SSL Proxying】にチェックを入れ、【Add】ボタンを押下し、【Host】に【*】を追加します。

スクリーンショット 2015-08-12 17.32.14

スクリーンショット 2015-08-12 17.48.12

スクリーンショット 2015-08-11 1.17.51

iPhoneの設定

ProxyとなるPCと検証対象のiPhoneは同一のネットワークに接続する必要があります。
そのため、iPhone側でもProxyへ接続するための設定を行います。

設定画面から接続しているWifiの設定を開き、【HTTPプロキシ】を【手動】に設定し、
【サーバ】にProxyとするPCのIPアドレスを入力し、【ポート番号】にCharlesで設定した【8888】番を入力します。
IMG_2425

また、SSL通信の中身を見るには証明書が必要になります。
iPhoneにSSL証明書をインストールするため、Safariで以下のリンクへアクセスし、Charlesの証明書を取得します。
http://charlesproxy.com/charles.crt

以上で設定は完了です。

この状態でiPhoneのアプリの起動やブラウザを立ち上げる等、通信が発生する操作を行うと
以下のような形でHTTP通信をモニタリングすることができます。

スクリーンショット 2015-08-12 0.53.26

 

 

各スマホアプリUA一覧まとめ

最後に個人的に抜粋したスマホアプリのUAを一覧表にまとめてみました。
(検証端末はiPhone6のiOS8.1です。)

アプリ名 UserAgent
Facebook Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 [FBAN/FBIOS;FBAV/36.0.0.40.231;FBBV/13431455;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/8.1;FBSS/2; FBCR/
Twitter Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 Twitter for iPhone
LINE Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 Safari Line/5.2.1
NAVERまとめ Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53 NaverMatome-iPhone
はてブ Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 hatenaBookmarkiPhoneApp/2.23.1
Gunosy gunosy/4.3.3 (iPhone; iOS 8.1; Scale/2.00)
SmartNews Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411
Amazon Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 ※iOSWebViewのUAでした
楽天市場 Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 IchibaApp-jp.co.rakuten.ichiba/2.7.3
Yodobashi Yodobashi 1.1.20 rv:1.1.20.1 (iPhone; iPhone OS 8.1; ja_JP)

 

アプリによっては独自のUAを設定しているものや、設定していなもの、
アプリのバージョンを記載しているものや、そうでないもの等色々ありますね。

このUA一覧が何かのお役に立てれば幸いです。。。

※これは2015/8/12時点の情報です。スマホアプリのUAはアプリ開発側で適宜変更される可能性があります。


DACエンジニア採用情報

  関連記事

no image
AWSにRailsアプリをデプロイする(準備編)

今回は、せっかくRailsで開発したアプリをAWS上に公開してみたいので その構築方法をまとめていきたいと思います。 (前回の記事:初心者がRailsで開発 – deviseでユーザー認証設定 ) AWSの設定はすでに社内で使用できるようになっていたので割愛します。 ★やりたいこと Gitlabでコ …

クラウド電話API “Twilio”で起こされてみた

どうも、開発部のクラヴマガです。 弊社サービスも最近はAWSの様なクラウド環境でサービスを構築することが多くなりました。 そこで問題になるのが、障害などによる深夜対応・・・。 データセンターに物理サーバをおいていた頃は、データセンターから障害発生時に 電話連絡をもらっていたのですが、クラウド環境では …

Burpの使い方!

こんにちは、第二ソリューション開発部の谷口です。 受託開発の部署で開発を担当してます。 APIを扱う機会が多く、今回は通信内容を確認するためのローカルプロキシツール「Burp」について書かせて頂きます。 Burpとは Webアプリケーション開発時の検証において、Webサーバとブラウザ間の通信内容を確 …

初心者がRailsで開発 – deviseでユーザー認証設定 –

こんにちは、2年目のYukaです。 開発部所属でありながら実は、、 実際に自分で手を動かして開発する機会がなかなかありませんでした。。 しかしついに、、、 開発初心者がRailsでWebアプリの開発に挑戦します!! 今回のゴールは社内でも使用しているGoogleアカウントで簡単にログインができるよう …

kubernetes の全ノード上で同じコンテナを動かす

今回は、kubernetes上で同一コンテナを全ノードで動かす方法を紹介したいと思います。kubernetes自体の起動方法はここでは割愛します。 はじめに 以前、CoreOSのFleet上でmackerel-agentを動かすということを行いました。今回は、kubernetes上で同じようにクラス …

Scala入門 準備編「開発環境構築」 – PHP使いからScala使いへ転身!

  はじめに みなさんこんにちは、今月入社しましたプロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 XmediaOneの開発で採用しているプログラム言語はS …

最強のSQLクライアント(GUIツール)「TeamSQL」を使ってみた!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 エンジニアの皆さん、SQLクライアント(GUIツール)って何使ってます? わたくしはこ …

Scala番外編「Boxに保存したファイルをBox APIを使ってダウンロードしよう!」

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 Box APIを使う背景・目的 DACはメディアレップです メディアレップとは、インタ …

ゼロからAngularでSPAを作ってみた(2) デプロイ・公開編

前回のおさらいと今回やること 前回(はじめてのアプリ編)では、Angular で簡単なチャットアプリを作るところまでやりました。ディレクトリ構成については説明できていなかったのですが、次のようになっています。(主なディレクトリとファイルのみ抜粋) + dist (ビルド・コンパイル後のファイルのディ …

【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 背景 わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しまし …