Dela via


Utföra tjänstidentifiering

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Högnivåprogram på Azure Sphere kan utföra tjänstidentifiering med dns-tjänstidentifiering (DNS-SD). Program kan använda tjänstidentifiering för att hitta nätverkstjänster och utföra värdnamnsmatchning 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 IP-adresserna och värdnamnen för målslutpunkten 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 unicast-tjänstidentifiering. Exempel på tjänstidentifiering visar hur du utför tjänstidentifiering på Azure Sphere.

Kommentar

Azure Sphere-brandväggen förhindrar att program kommunicerar med obehöriga tjänster. Att tillåta utgående anslutningar till .local TLD i programmanifestet kan dock öka säkerhetsrisken för en enhet genom att tillåta att ett program ansluter 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 förhindrar 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 identifieras i det lokala nätverket också finns i det lokala undernätet.

Inkludera rubrikfiler

Program som utför tjänstidentifiering måste innehålla huvudfilen för matchning:

 #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 AllowedConnections i programmanifestet. Azure Sphere-brandväggen tillåter sedan att programmet ansluter till de identifierade 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 till identifierade resurser i det lokala undernätet.

Följande typer av tjänstnamn stöds i funktionen AllowedConnections:

  • 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å 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 unicast DNS-fråga

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

För att skicka en DNS-SD-fråga via en multicast-länk måste programmet öppna en socket och skicka begäran via 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 exemplet för tjänstidentifiering.

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 icke-bakåtkompatibel ändring 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. Curl 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.