iPhoneやiPadの端末でのパケットキャプチャ
はじめに
トラブルシューティングでパケットキャプチャは1つの手段だと思いますが、一般的にはPCとWireShark/tcpdumpで実施することが多いかと思います。
実際のキャプチャ方法として、特に無線関連では
・Macに標準搭載されている「ワイヤレス診断」の「スニファ」機能を使う
・WindowsでOmniPeekとドライバを専用に改造した外付けNICを使う
・選ばれしチップとドライバが搭載されたLinuxで、GUIならばWireSharkのモニタモードで
CLIならばtcpdumpでインターフェースを指定してキャプチャする
のどれかがほとんどではないだろうか。
しかしiPhoneやiPadの端末をキャプチャ端末として使うという方法があるらしく(以前から試そうと思っていてできてなかった)今回やってみたので作業をまとめてみる。
今回のテスト環境を簡単にまとめる
【PC】
MacBook Pro, 13-inch, M2, 2022
Apple M2, 24GB RAM
mac OS Ventura (ver 13.4)
【端末】
iPad Pro, 11-inch, 4thGen
iPadOS ver 16.5 (20F66)
方法
1. iPhoneやiPadのUDIDを得る
iPhoneやiPadをMacに接続して、端末の「信頼」を設定すると、Mac側から端末の情報を得られる。
ここからUDID(Unique Device Identifier)を取得する。
やり方はいくつかありそう。
【1】Finderを使う方法
端末を接続して「信頼」などアクセス権限が取れればデバイスが表示される。
デバイス名「Y.Ken’s iPad Pro 2022」の下の部分はクリックすると順番に情報が変わり
そのうちの1つにUDIDも含む情報がある。
右クリックでその情報がコピーできるのが良い。
【2】Xcodeを使う方法
開発者ならばXcodeは入れていることだろうと思うので、Xcodeのデバイス管理からも実施可能。
アプリ開発などでVirtualなiPhoneやiPadを使っている場合でも、この方法でパケットキャプチャが行える。
Xcodeを開き、Window > Devices and Simulators で一覧を表示させる。
端末を選択して表示させ、上部の情報欄の「identifier」のところがUDIDに相当する模様。
ちなみにUDIDってあまり聞き馴染みがなく、スマホなど一般的な端末にあるUUID(Universally Unique IDentifier)のことかと思っていたが、Apple製品にある端末識別番号らしい。名称と略称がややこしい。
2. Macにキャプチャインターフェースを設定する
接続した端末を仮想インターフェースとして登録する。Remote Virtual Interfaceというらしい。
設定するには
rvictl -s <UDID>
を実行して
Starting device 00008888-0123456789A1234E [SUCCEEDED] with interface rvi0
のように表示されればOK。
仮想インターフェースがちゃんと設定できているか確認するには
rvictl -l
を実行して
Current Active Devices:
[1] 00008888-0123456789A1234E with interface (null)
のように表示されればOK。
3.WireSharkを使ってパケットキャプチャを実施する
仮想インターフェースがちゃんと認識されていれば、WireSharkのインターフェースの一覧に[SUCCEEDED]のあとに表示された名称「rvi0」のようなインターフェースができている。
あとは通常の有線のパケットキャプチャと同じ要領で、WireSharkを使ってキャプチャ&フィルタ&保存&解析などが可能。
tcpdumpを使うことももちろん可能。tcpdumpならばすべてコマンドで完結する。
4.仮想インターフェースの停止
端末をMacから抜いてしまうというのも手だろうが、一応ソフトウェア的にはインターフェースの削除までやって原状復帰となると思うので書いておく。
停止させるには
rvictl -x <UDID>
を実行する。こちらも[SUCCEEDED]と出れば、正常に停止できている。
参考文献
Discussion