Dela via


Utföra tjänstidentifiering

Program på hög nivå i Azure Sphere kan utföra tjänstidentifiering med hjälp av DNS-SD (Dns-SD). Program kan använda tjänstidentifiering för att hitta nätverkstjänster och utföra värdens namnmatchning så att de kan interagera med tjänsten via Azure Sphere-brandväggen. Multicast DNS (mDNS) kan också användas för att utföra peer-to-peer-identifiering i ett lokalt nätverk, vilket är särskilt användbart när MÅLslutpunktens IP-adresser och värdnamn inte är kända vid designtillfället.

Program använder DNS-SD-frågor för att hämta DNS-poster från icke-lokala DNS-servrar eller via en multicast-länk. Om namnet som efterfrågas finns under den lokala toppnivådomänen (TLD) är frågan multicast i det lokala nätverket via alla aktiverade nätverksgränssnitt. annars utförs identifiering av Unicast-tjänsten. Exempel på tjänstidentifiering visar hur du utför tjänstidentifiering på Azure Sphere.

Observera

Azure Sphere-brandväggen hindrar program från att kommunicera med obehöriga tjänster. Men om utgående anslutningar tillåts till .local TLDs i programmanifestet kan säkerhetsrisken öka för en enhet genom att tillåta ett program att ansluta till obehöriga tjänster som annonseras i det lokala nätverket. Program bör endast tillåta utgående anslutningar till .local TLDs i skyddade miljöer som hindrar obehöriga parter från reklamtjänster. För att ge ytterligare skydd i det här scenariot kräver Azure Sphere att tjänster som upptäcks i det lokala nätverket också finns på det lokala undernätet.

Ta med huvudfiler

Program som utför tjänstidentifiering måste innehålla rubrikfilen för att matcha:

 #include <resolv.h>

Tillåt en tjänstanslutning

Innan du utför en DNS-SD-fråga måste du lägga till tjänsten i funktionen Tillåtnaanslutningar i programmanifestet. Azure Sphere-brandväggen gör det sedan möjligt för programmet att ansluta till de upptäckta tjänstinstanserna med hjälp av deras associerade värdnamn och IP-adresser. Om en .local TLD-tjänst anges tillåter brandväggen endast anslutningar att hitta resurser på det lokala undernätet.

Följande typer av tjänstnamn stöds i funktionen Tillåtnaanslutningar:

  • Namn på lokal DNS-tjänst, till exempel "_sample._tcp.local"
  • Namn på icke-lokala DNS-tjänster, till exempel "_sampleinstance._tcp.dns-sd.org"
  • Namn på en lokal tjänstinstans, till exempel "_sampleinstance._tcp.hostname.local"
  • Domännamn, till exempel "samplehost.contoso.com"
  • IP-adress

Här är ett utdrag från ett programmanifest som innehåller ett namn på en icke-lokal tjänst.

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

Utföra en DNS-SD-fråga

Om du vill utföra en DNS-SD-fråga måste du begära flera typer av DNS-poster:

  • PTR-poster som räknar upp instanser av en DNS-tjänst.
  • SRV- och TXT-poster som innehåller information om tjänstinstanserna, till exempel värdnamn och port.
  • En post som innehåller IP-adresserna för de hämtade värdnamnen.

Innan du skickar frågan måste du skapa och initiera den och sedan lägga till ett frågemeddelande som begär DNS-posten. Du kan skapa och initiera en DNS-SD-fråga genom att anropa POSIX-funktionen res_init(). Du kan skapa ett meddelande för frågan genom att anropa POSIX-funktionen res_mkquery().

Skicka en DNS-fråga med unicast

När du gör identifiering av unicast-tjänster kan du skicka DNS-SD-frågan och hämta svaret genom att anropa POSIX-funktionen res_send().

Om du vill skicka en DNS-SD-fråga över en multicast-länk måste programmet öppna ett socket och skicka begäran över socketen till loopback-IP-adressen 127.0.0.1 (målport 53). När begäran har skickats kan flera svar returneras. Programmet bör vänta och lyssna i flera sekunder för att samla in alla svar. Detta visas i tjänstidentifieringsprovet.

Viktigt

Den här loopback-IP-adressen är en betafunktion som kommer att dras tillbaka och sedan ersättas i framtida versioner. Det här blir en ändring som går sönder för program som förlitar sig på adressen.

Tillåtna anslutningar för värdar med flera IP-adresser

Azure Sphere-brandväggen tillåter endast anslutningar till en IP-adress per värdnamn. Om en värd har flera IP-adresser tillåter Azure Sphere-brandväggen endast anslutningar till en av adresserna. Ett program kan använda curl för att göra HTTPS-begäranden till en värd som har flera IP-adresser. försöker ansluta till varje IP-adress tills den tillåtna adressen hittas. Detta kan dock orsaka en fördröjning medan programmet hittar den tillåtna adressen.