iPhone

iPhone がどんな通信をしているのかを Mac で確認する方法、だいぶマニアックな内容です

iOS 8 で他社製キーボードアプリが使えるようになって、キーボード入力されたデータがどこかに送られるのでは?という不安の声が聞こえたりします。それを確かめるためには iPhone がどんな通信をしているかを見る必要があります。今日も小難しいお話を @azur256 がお送りします。なお、このエントリの内容はできるだけ分かりやすく書こうと思っていますので、専門的に見ると正確でなかったりするところはありますがそこはご容赦ください。

通信を見るとは


普通の人は「ネットワーク」などというものの事は気にもせず、Web を見たり、SNS を使ったりするための電波、という感覚だと思いますが、実は色々と複雑な取り決めや仕組みの元に成り立っています。その仕組みを使うことで iPhone がどんな通信をしているかを見ることができます。ただし「見える」であって「分かる」ではありません。どういう通信をしているかを「分かる」ためには、先ほどの色々な取り決めや仕組みを理解しないとならないので、このエントリでは「見える」ところまでをご紹介します。

iPhone が通信をする時には電波を使います。この電波は家の中の Wifi のアンテナを経由したり、携帯電話会社のアンテナを経由したりして目標のサービスなどにデータを送ったり、そこからデータを受け取ったりします。

このアンテナのところにはネットワークを中継する機械(ルーターなど)があり、中継部分に別の機械を繋いだりすることでそこを流れているデータの中身を見ることができます。このデータの中身を見ることをキャプチャする、と言いますが、流れるデータのスクリーンショットを連続して撮っていくようなイメージです。

良くニュースなどで話題になるネットワークの盗聴なども同じような方法でデータを盗み見るものだと思ってください。ただ、ここで流れているデータを見ることができても、必ずしもそのデータの中身が分かるわけではありませんし(データが暗号化されている通信もある)、そもそもそんなに簡単にネットワークのデータを盗み見るための機械を取り付けることができるわけではありません。

どうやって iPhone の通信を採取するのか


先ほどの方法は自宅の Wifi ルーターに別の機器を取り付けたりするイメージです。これはなかなか大変ですし、携帯電話会社の電波を使った通信は携帯電話会社の設備に機器を繋げることも当然できません。

ところが iPhone には、その通信を見るための仕組みが準備されています。iPhone と Mac をライトニングケーブルで繋いで iPhone のネットワーク通信を Mac で見ることができるのです。(Xcode が必要なので、これをやってみる方は XCode をインストールしておきましょう)。

先日のエントリ、 IOS 8 からサードパーティキーボードが使えるようになって便利?不安? もこの方法で調べました。

なお、この方法は Apple から公式に公開されている情報です。Developer Program のライセンス下の情報では無く、Developer ライブラリの情報として誰でも見ることができるのでご紹介します。
Technical Q&A QA1176: Getting a Packet Trace

事前準備として、Xcode をインストールしていることと、iPhone の UUID を調べておく必要があります。

まず、Mac と iPhone をライトニングケーブルで繋ぎます。繋いだらターミナルアプリを立ち上げて、次のコマンドを入力します。’xxxxx…’ となっているところは iPhone の UUID を入力してください。

$ rvictl -s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

以下のように ‘[SUCCEEDED]’ と出れば成功です。

Starting device xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [SUCCEEDED] with interface rvi0

このコマンドにより iPhone の通信を見るためのインターフェースが ‘rvi0’ という名前で Mac 側に作られました。
後は、 tcpdump というコマンドを使って、この ‘rvi0’ のデータをキャプチャすれば OK です。

$ sudo tcpdump -i rvi0 -n -s 1600 -w iphone.pcap

このコマンドを実行したら、iPhone で何か操作をすると、その時のネットワークに流れるデータを Mac でログ(iPhone.pcap)として保存することができます。あまり多くなると解析が大変になるので、ダンプを取る期間は短くした方が良いです。ダンプの取得をやめるには CTRL+C ボタンで終了させます。

キャプチャが終わったら iPhone 用のデバイスは削除しておきましょう。先ほどと同じように UUID を指定してコマンドを実行します。

$ rvictl -x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

今回も ‘[SUCCEEDED]’ と出れば正解です。

Stopping device xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [SUCCEEDED]

次にキャプチャのデータを見てみましょう。

キャプチャしたデータを見る


tcpdump を使ってキャプチャしたデータは WireShark というアプリを使って読み込ませると見ることができます。この WireShark を使うには XQuatz が必要なので両方インストールしておいてください。


WireShark を立ち上げて(最初は立ち上がるのに時間が掛かるかもしれません)、先ほどの iPhone.pcap を読み込ませると次のような画面が表示されます。これで、ネットワークを流れる情報を見ることができました。
NWCapture 001

実際に何が行われているのか、はこの画面に表示されている内容を十分に理解しないと分からないので、今日はココまでにします。何かの理由でネットワークを見る必要が出てきた時にはご活用ください。



最後まで読んでいただきありがとうございます。

follow us in feedly 左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです


Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします

RSSリーダへの登録は こちら からどうぞ。

URL
TBURL

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

フェイスブックでのコメント

Return Top