Servicedetectie uitvoeren
Belangrijk
Dit is de Documentatie voor Azure Sphere (verouderd). Azure Sphere (verouderd) wordt op 27 september 2027 buiten gebruik gesteld en gebruikers moeten tegen deze tijd migreren naar Azure Sphere (geïntegreerd). Gebruik de versiekiezer boven de inhoudsweergave om de Documentatie van Azure Sphere (geïntegreerd) weer te geven.
Toepassingen op hoog niveau in Azure Sphere kunnen servicedetectie uitvoeren met behulp van DNS-servicedetectie (DNS-SD). Toepassingen kunnen servicedetectie gebruiken om netwerkservices te vinden en hostnaamomzetting uit te voeren, zodat ze kunnen communiceren met de service via de Azure Sphere-firewall. Multicast DNS (mDNS) kan ook worden gebruikt om peer-to-peer-detectie uit te voeren op een lokaal netwerk, wat vooral handig is wanneer de IP-adressen en hostnamen van het doeleindpunt niet bekend zijn tijdens het ontwerp.
Toepassingen gebruiken DNS-SD-query's om DNS-records op te halen van niet-lokale DNS-servers of via een multicast-koppeling. Als de naam die wordt opgevraagd zich onder het DOMEIN op het hoogste niveau van .local (TLD) bevindt, wordt de query multicast op het lokale netwerk uitgevoerd via alle ingeschakelde netwerkinterfaces. Anders wordt unicastservicedetectie uitgevoerd. Het voorbeeld van servicedetectie laat zien hoe u servicedetectie uitvoert op Azure Sphere.
Notitie
De Azure Sphere-firewall voorkomt dat toepassingen communiceren met niet-geautoriseerde services. Het toestaan van uitgaande verbindingen met .local TLD's in het toepassingsmanifest kan echter het beveiligingsrisico voor een apparaat verhogen door een toepassing toe te staan verbinding te maken met niet-geautoriseerde services die worden aangekondigd op het lokale netwerk. Toepassingen mogen alleen uitgaande verbindingen met .local TLD's toestaan in beveiligde omgevingen die voorkomen dat onbevoegde partijen reclameservices maken. Voor extra beveiliging in dit scenario vereist Azure Sphere dat services die in het lokale netwerk worden gedetecteerd, zich ook in het lokale subnet bevinden.
Koptekstbestanden opnemen
Toepassingen die servicedetectie uitvoeren, moeten het headerbestand voor het omzetten bevatten:
#include <resolv.h>
Een serviceverbinding toestaan
Voordat u een DNS-SD-query uitvoert, moet u de service toevoegen aan de mogelijkheid AllowedConnections van het toepassingsmanifest. Met de Azure Sphere-firewall kan de toepassing vervolgens verbinding maken met de gedetecteerde service-exemplaren met behulp van de bijbehorende hostnamen en IP-adressen. Als er een .local TLD-service is opgegeven, staat de firewall alleen verbindingen toe met gedetecteerde resources in het lokale subnet.
De volgende typen servicenamen worden ondersteund in de mogelijkheid AllowedConnections:
- Lokale DNS-servicenaam, zoals '_sample._tcp.local'
- Niet-lokale DNS-servicenaam, zoals '_sampleinstance._tcp.dns-sd.org'
- Naam van lokale service-instantie, zoals '_sampleinstance._tcp.hostname.local'
- Domeinnaam, zoals 'samplehost.contoso.com'
- IP-adres
Hier volgt een fragment uit een toepassingsmanifest dat een niet-lokale servicenaam bevat.
"AllowedConnections": [ "_http._tcp.dns-sd.org" ]
Een DNS-SD-query uitvoeren
Als u een DNS-SD-query wilt uitvoeren, moet u verschillende typen DNS-records aanvragen:
- PTR registreert die exemplaren van een DNS-service opsommen.
- SRV - en TXT-records die details van de service-exemplaren bevatten, zoals hostnaam en poort.
- Een record die de IP-adressen van de opgehaalde hostnamen bevat.
Voordat u de query verzendt, moet u deze maken en initialiseren en vervolgens een querybericht toevoegen dat de DNS-record aanvraagt. U kunt een DNS-SD-query maken en initialiseren door de FUNCTIE POSIX aan te roepen res_init(). U kunt een bericht voor de query maken door de FUNCTIE POSIX aan te roepen res_mkquery().
Een unicast-DNS-query verzenden
Wanneer u unicastservicedetectie uitvoert, kunt u de DNS-SD-query verzenden en het antwoord ophalen door de FUNCTIE POSIX aan te roepen res_send().
De query verzenden via een multicastkoppeling
Als u een DNS-SD-query via een multicastkoppeling wilt verzenden, moet de toepassing een socket openen en de aanvraag via de socket verzenden naar het loopback-IP-adres 127.0.0.1 (doelpoort 53). Nadat de aanvraag is verzonden, kunnen er meerdere antwoorden worden geretourneerd. De toepassing moet enkele seconden wachten en luisteren om alle antwoorden te verzamelen. Dit wordt gedemonstreerd in het voorbeeld van servicedetectie.
Belangrijk
Dit loopback-IP-adres is een bètafunctie die buiten gebruik wordt gesteld en vervolgens wordt vervangen in toekomstige releases. Dit is een belangrijke wijziging voor toepassingen die afhankelijk zijn van het adres.
Toegestane verbindingen voor hosts met meerdere IP-adressen
De Azure Sphere-firewall staat alleen verbindingen toe met één IP-adres per hostnaam. Als een host meerdere IP-adressen heeft, staat de Azure Sphere-firewall alleen verbindingen met een van de adressen toe. Een toepassing kan curl gebruiken om HTTPS-aanvragen te verzenden naar een host met meerdere IP-adressen. Curl probeert verbinding te maken met elk IP-adres totdat het toegestane adres is gevonden. Dit kan echter een vertraging veroorzaken terwijl de toepassing het toegestane adres vindt.