
A mDNS sniffer and interpreter.
著者: Sebastian Garcia ([email protected], @eldracote), Veronica Valeros ([email protected], @verovaleros)
Sapito は、Python で書かれたマルチキャスト DNS (mDNS) スニファ兼インタープリタです。Sapito は pcap ファイルまたはネットワークインターフェースからパケットをキャプチャし、その結果を解釈します。つまり、Sapito は mDNS の質問と回答を理解し、メッセージの意味を把握することができます。また、MacOS コンピュータや数種類の iPad など、特定のデバイスを識別することもできます。色分けされた出力により、重要な情報が強調表示されます。
バグを発見した場合は、ツールの出力とともに [email protected] まで報告してください。問題のパケットが含まれる pcap をお持ちの場合は、バグレポートに同封していただけると非常に役立ちます。

Sapito には最新版の公開 Docker イメージが DockerHub にあり、Linux システムで問題なく動作します (MacOS はまだサポートされていません)。
Sapito を実行するには:
docker run --rm --network host --name sapito -it stratosphereips/sapito:latest python3 sapito.py -i <interface>
これは、ビデオコンテンツの AirPlay を有効にするネットワークサービスの Bonjour 広告です。つまり、iOS デバイスが Apple TV を「リモートディスプレイ」として検出し、ビデオを表示できるようにするものです。
これは Apple TV Remote を機能させるネットワークサービスの 1 つです。つまり、iPhone や iPad から Apple TV デバイスをリモート操作するためのアプリ、または Control Center 内蔵機能のことです。このサービスは、iOS デバイスが Apple TV を検出できるように Bonjour 経由でネットワーク上に広告されます。
このサービスは Apple によって公式に文書化されていないようですが、AirPlay 2 システムの動作に関与していると思われます。
このネットワークサービスは Remote Audio Output Protocol (リモートオーディオ出力プロトコル) と呼ばれます。これは基本的に、Apple TV が AirPlay オーディオレシーバーとして機能することを示しています。この Bonjour 広告により、iOS デバイスは Apple TV を、オーディオを送信できる「スピーカー」として検出できます。
これは Bonjour スリーププロキシです。Apple TV が、省エネルギー化のために現在低電力モードにある他のデバイスに代わってさまざまなネットワーククエリに応答できるようにする仕組みです。例えば、共有 iTunes ライブラリや共有プリンタを提供している Mac が考えられます。Mac がスリープモードの間、Apple TV はこれらのサーバーに対するネットワーク要求に応答できます。例えば、ユーザーがネットワーク上で利用可能な共有プリンタの一覧を表示できるようにすることができます。ただし、ユーザーが何かを印刷することを選択した場合、Apple TV は Mac をスリープから復帰させ、その要求を Mac に転送します。
これは HomeKit に関するネットワークサービスです。HomeKit は、家庭内のデバイスとの通信と制御を行う Apple のシステムです。制御可能な電球、シェード、ドアベルなどが例として挙げられます。このような環境では、ユーザーが (自宅にいないときなどに) デバイスをリモートで制御できるよう、Apple TV がプロキシとして機能します。デバイスが Bluetooth 専用で範囲外にある場合でも同様です。ネットワーク上の通常の HomeKit デバイスは、代わりに _hap._tcp として広告されることに注意してください。
これは Apple TV Remote を機能させるもう 1 つのネットワークサービスです。このサービスはデバイス認証に関係しています。例えば、Apple TV で YouTube ビデオを再生したい場合、Apple TV はその実行を許可する前にデバイスの認証を要求することができます。実際には、Apple TV がテレビ画面に PIN コードを表示し、ユーザーがその PIN コードを iOS デバイスに入力することで認証が行われます。この PIN コードは「touch-able」として広告されるサービスを使用して転送され、デバイスが認証されます。
Known-Answer suppression (既知回答の抑制) によるものです1:
Known-Answer Suppression
When a Multicast DNS querier sends a query to which it already knows
some answers, it populates the Answer Section of the DNS query
message with those answers.
Generally, this applies only to Shared records, not Unique records,
since if a Multicast DNS querier already has at least one Unique
record in its cache then it should not be expecting further different
answers to this question, since the Unique record(s) it already has
comprise the complete answer, so it has no reason to be sending the
query at all. In contrast, having some Shared records in its cache
does not necessarily imply that a Multicast DNS querier will not
receive further answers to this query, and it is in this case that it
is beneficial to use the Known-Answer list to suppress repeated
sending of redundant answers that the querier already knows.
‘RFC 6762: Multicast DNS’. https://www.rfc-editor.org/rfc/rfc6762#section-7.1 (2022年10月1日アクセス). ↩