Network Extensionはあまり使い方が知られていないフレームワークです。
Wi-Fiの設定変更、コンテンツフィルタ、VPNの構成あるいは実装といったiOSのネットワーク機能を拡張するAPIを提供します。
iOSデバイスでパケットキャプチャをする方法は主にCharles ProxyなどのWeb Proxyを利用したツールを使う、仮想ネットワークインターフェースを監視する、Charles for iOSなどのデバイス上でVPNクライアントとして動くツールを使うという3種類があります。
デバイス上で動作するパケットキャプチャを実装するにはNetwork Extensionを使ってVPNクライアントを実装しますが、もともと情報の少ないこのフレームワークの中でもVPNクライアントの実装方法はほとんど情報がありません。
ソフトウェアの性質上、プライバシーの観点からVPNサーバも同じアプリにローカルサーバとして実装することが望ましいですが、そのような例はまず見つからないでしょう。
そこでiOSデバイス上で動くVPNクライアントおよびサーバを実装しパケットキャプチャを行うアプリを実際に作り、パケットキャプチャの方法を説明します。
Web Proxyを使う方法では不可能なUDPパケットのキャプチャができるのでゲームなど主にUDPが使われるアプリの解析もできるのが便利です。
また自分でパケットキャプチャが書けるということは、特定のパケットに対して任意の処理を実行することができるということです。つまり他のアプリの通信内容と連携するツールを作れます。
今回は応用例として、作成したアプリを用いてあるオンライン対戦ゲームの通信を実際に解析し、普通では見えないゲームの状態や他プレイヤーの行動をリアルタイムに監視・追跡するツールを作ってお見せします。