
A mDNS sniffer and interpreter.
Autores: Sebastian Garcia ([email protected], @eldracote), Veronica Valeros ([email protected], @verovaleros)
Sapito es un sniffer e intérprete de DNS multicast (mDNS) escrito en Python. Sapito captura paquetes de un pcap o de una interfaz e interpreta los hallazgos. Esto significa que Sapito es capaz de entender las preguntas y respuestas mDNS, dando sentido a los mensajes. También puede identificar ciertos dispositivos, como encontrar computadoras MacOS y varios tipos de iPads. La salida con código de colores ayuda a resaltar información importante.
Si encuentras un error, por favor repórtalo junto con la salida de la herramienta a [email protected]. Si tienes el pcap con los paquetes problemáticos, sería extremadamente útil que lo envíes junto con el informe del error.

Sapito tiene una imagen Docker pública con la última versión en DockerHub, que se ejecuta bien en sistemas Linux (MacOS aún no es compatible).
Para ejecutar Sapito:
docker run --rm --network host --name sapito -it stratosphereips/sapito:latest python3 sapito.py -i <interface>
Este es un anuncio de Bonjour para el servicio de red que permite AirPlay de contenido de video. Es decir, esto permite que los dispositivos iOS descubran el Apple TV como una "pantalla remota" en la que pueden mostrar video.
Este es uno de los servicios de red que hacen funcionar el Apple TV Remote, es decir, la aplicación o la función integrada del Control Center para controlar de forma remota los dispositivos Apple TV desde iPhones y iPads. Este servicio se anuncia en la red mediante Bonjour para asegurar que los dispositivos iOS puedan descubrir el Apple TV.
Este servicio aparentemente no está documentado por Apple, pero parece estar involucrado en hacer funcionar el sistema AirPlay 2.
Este servicio de red se llama Protocolo de Salida de Audio Remoto (Remote Audio Output Protocol). Esencialmente indica que el Apple TV funciona como receptor de audio AirPlay. Este anuncio de Bonjour permite que los dispositivos iOS descubran el Apple TV como un "altavoz" al que puedes enviar audio.
Este es un proxy de suspensión de Bonjour (Sleep Proxy). La idea es que el Apple TV pueda responder a varias consultas de red para otros dispositivos que se encuentran actualmente en modo de bajo consumo para reducir el uso de energía. Por ejemplo, podría ser una Mac que ofrece una biblioteca de iTunes compartida o una impresora compartida. El Apple TV puede entonces responder a las solicitudes de red para estos servidores mientras la Mac está en modo de suspensión, por ejemplo, permitiendo al usuario listar las impresoras compartidas disponibles en la red. Sin embargo, cuando el usuario elige imprimir algo, el Apple TV despierta la Mac y le transfiere la solicitud.
Este es un servicio de red relacionado con HomeKit, el sistema de Apple para comunicarse y controlar dispositivos en el hogar. Piensa en bombillas controlables, persianas, timbres, lo que sea. El Apple TV funciona como un proxy en ese entorno, de modo que el usuario puede controlar los dispositivos de forma remota (es decir, fuera de casa) incluso si los dispositivos son solo Bluetooth y están fuera del alcance. Ten en cuenta que los dispositivos HomeKit comunes en la red se anuncian como _hap._tcp en su lugar.
Este es otro de los servicios de red que hacen funcionar el Apple TV Remote. Este servicio se refiere a la autenticación de dispositivos. Es decir, si quieres, por ejemplo, reproducir un video de Youtube en el Apple TV, el Apple TV puede exigir que el dispositivo esté autenticado antes de permitirlo. En la práctica, la autenticación funciona cuando el Apple TV muestra un código PIN en el televisor que el usuario ingresa en el dispositivo iOS. Este código PIN se transfiere utilizando el servicio anunciado como "touch-able" para autenticar el dispositivo.
Debido a la supresión de respuestas conocidas1:
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 (consultado el 01 de octubre de 2022). ↩