Compartir a través de


Realizar detección de servicios

Las aplicaciones de alto nivel en Azure Sphere pueden realizar la detección de servicios mediante la detección de servicios DNS (DNS-SD). Las aplicaciones pueden usar la detección de servicios para buscar servicios de red y realizar la resolución de nombres de host, de modo que puedan interactuar con el servicio a través del firewall azure sphere. El DNS de multidifusión (mDNS) también se puede utilizar para realizar la detección punto a punto en una red local, lo que es especialmente útil cuando las direcciones IP y los nombres de host del punto de conexión de destino no se conocen en tiempo de diseño.

Las aplicaciones usan consultas DNS-SD para recuperar registros DNS de servidores DNS no locales o a través de un vínculo multidifusión. Si el nombre que se está consultando está bajo el dominio de nivel superior .local (TLD), la consulta es multidifusión en la red local a través de todas las interfaces de red habilitadas; De lo contrario, se realiza la detección del servicio unicast. El ejemplo de detección de servicio muestra cómo realizar la detección de servicios en Azure Sphere.

Nota

El firewall Azure Sphere impide que las aplicaciones se comuniquen con servicios no autorizados. Sin embargo, permitir conexiones salientes a TLD .local en el manifiesto de la aplicación puede aumentar el riesgo de seguridad para un dispositivo al permitir que una aplicación se conecte con servicios no autorizados anunciados en la red local. Las aplicaciones solo deben permitir conexiones salientes a TLD .local en entornos protegidos que impidan que las partes no autorizadas produzcan servicios de publicidad. Para proporcionar protección adicional en este escenario, Azure Sphere requiere que los servicios detectados en la red local también residan en la subred local.

Incluir archivos de encabezado

Las aplicaciones que realizan la detección de servicios deben incluir el archivo de encabezado resolv:

 #include <resolv.h>

Permitir una conexión de servicio

Antes de realizar una consulta DNS-SD, debe agregar el servicio a la funcionalidad AllowedConnections del manifiesto de la aplicación. A continuación, el firewall Azure Sphere permitirá a la aplicación conectarse a las instancias de servicio detectadas usando sus nombres de host y direcciones IP asociados. Si se especifica un servicio TLD .local , el firewall solo permitirá conexiones a recursos detectados en la subred local.

Los siguientes tipos de nombres de servicio son compatibles con la función AllowedConnections:

  • Nombre del servicio DNS local, como "_sample._tcp.local"
  • Nombre del servicio DNS no local, como "_sampleinstance._tcp.dns-sd.org"
  • Nombre de instancia de servicio local, como "_sampleinstance._tcp.hostname.local"
  • Nombre de dominio, como "samplehost.contoso.com"
  • Dirección IP

Este es un extracto de un manifiesto de aplicación que incluye un nombre de servicio no local.

"AllowedConnections": [ "_http._tcp.dns-sd.org" ]

Realizar una consulta DNS-SD

Para realizar una consulta DNS-SD, debe solicitar varios tipos de registros DNS:

  • Registros PTR que enumeran instancias de un servicio DNS.
  • Registros SRV y TXT que contienen detalles de las instancias de servicio, como el nombre de host y el puerto.
  • Registros que contienen las direcciones IP de los nombres de host recuperados.

Antes de enviar la consulta, debe crearla e inicializarla y, a continuación, agregar un mensaje de consulta que solicite el registro DNS. Puede crear e inicializar una consulta DNS-SD llamando a la función POSIX res_init(). Puede crear un mensaje para la consulta llamando a la función POSIX res_mkquery().

Enviar una consulta DNS de unidifusión

Al realizar la detección del servicio unicast, puede enviar la consulta DNS-SD y recuperar la respuesta llamando a la función POSIX res_send().

Para enviar una consulta DNS-SD sobre un vínculo multidifusión, la aplicación debe abrir un socket y enviar la solicitud sobre el socket al loopback IP address 127.0.0.1 (puerto de destino 53). Después de enviar la solicitud, pueden devolverse varias respuestas. La aplicación debe esperar y escuchar varios segundos para recopilar todas las respuestas. Esto se muestra en el ejemplo de detección de servicios.

Importante

Esta dirección IP de loopback es una característica beta que se retirará y reemplazará en futuras versiones. Este será un cambio de última hora para las aplicaciones que dependen de la dirección.

Conexiones permitidas para hosts con varias direcciones IP

El firewall Azure Sphere solo permite conexiones a una dirección IP por nombre de host. Si un host tiene varias direcciones IP, el firewall Azure Sphere solo permite conexiones a una de las direcciones. Una aplicación puede usar curl para realizar solicitudes HTTPS a un host que tiene varias direcciones IP; Curl intentará conectarse a cada dirección IP hasta que se encuentre la dirección permitida. Sin embargo, esto puede causar un retraso mientras la aplicación encuentra la dirección permitida.