共用方式為


執行服務探索

Azure 球體上的高層級應用程式可以使用 DNS 服務探索 (DNS-SD) 來執行服務探索。 應用程式可以使用服務探索來尋找網路服務,並執行主機名稱解析,以便透過 Azure 球體防火牆與服務互動。 多重預報 DNS (mDNS) 也可以用來在本機網路上執行對等探索,當目的端點的 IP 位址和主機名稱在設計時不為人知時特別有用。

應用程式會使用 DNS-SD 查詢,從非本機 DNS 伺服器或透過多重廣播連結擷取 DNS 記錄。 如果查詢的名稱位於 TLD) (.local 上層網域底下,查詢會透過所有啟用的網路介面在本機網路上進行多重廣播;否則,就會執行 Unicast 服務探索。 服務探索範例示範如何在 Azure 球體上執行服務探索。

注意

Azure 球體防火牆可防止應用程式與未經授權的服務通訊。 不過,允許應用程式資訊清單中的輸出連線 至 .local TLD 可能會增加裝置的安全性風險,方法是允許應用程式連線到在本機網路上公告的未經授權服務。 應用程式應該只允許在安全環境中輸出連線至 .local TLD,以防止未經授權的一方提供廣告服務。 若要在此案例中提供額外的保護,Azure 球體要求在區域網路上發現的服務也位於本機子網上。

包含頁首檔案

執行服務探索的應用程式必須包含解析頁首檔案:

 #include <resolv.h>

允許服務連線

執行 DNS-SD 查詢之前,您必須先將服務新增至 應用程式資訊清單的 AllowedConnections 功能。 接著,Azure 球體防火牆會允許應用程式使用其相關聯的主機名稱稱和 IP 位址連線到發現的服務實例。 如果指定 .local TLD 服務,防火牆只會允許連線到本機子網上發現的資源。

AllowedConnections 功能支援下列服務名稱類型:

  • 本機 DNS 服務名稱,例如 「_sample._tcp.local」
  • 非本機 DNS 服務名稱,例如「_sampleinstance._tcp.dns-sd.org」
  • 本機服務實例名稱,例如 「_sampleinstance._tcp.hostname.local」
  • 功能變數名稱,例如「samplehost.contoso.com」
  • IP 位址

以下是包含非本機服務名稱的應用程式資訊清單摘要。

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

執行 DNS-SD 查詢

若要執行 DNS-SD 查詢,您必須要求數種類型的 DNS 記錄

  • 列舉 DNS 服務實例的PTR記錄。
  • 包含服務實例詳細資料的SRVTXT記錄,例如主機名稱和埠。
  • 包含 擷取之主機名稱 IP 位址的記錄。

傳送查詢之前,您必須先建立並初始化查詢,然後新增要求 DNS 記錄的查詢訊息。 您可以透過呼叫 POSIX 函 數res_init () 來建立並初始化 DNS-SD 查詢。 您可以呼叫 POSIX 函數 res_mkquery () 來建立查詢的訊息。

傳送 Unicast DNS 查詢

執行 Unicast 服務探索時,您可以傳送 DNS-SD 查詢並呼叫 POSIX 函數 res_send () 來擷取回應。

若要透過多重投影片連結傳送 DNS-SD 查詢,應用程式必須開啟套介面,然後透過套接座將要求傳送至回接 IP 位址 127.0.0.1 (目的地埠 53) 。 傳送要求之後,可能會傳回多個回復。 應用程式應該等候並聆聽幾秒鐘,以收集所有回應。 這會在 服務探索範例中示範。

重要

這個回溯 IP 位址是 Beta 版功能,將會在之後的版本中淘汰並取代。 對於依賴此位址的應用程式來說,這將會是一項破折的變更。

具有多個 IP 位址之主機的允許連線

Azure 球體防火牆只允許每個主機名稱連線到一個 IP 位址。 如果主機有多個 IP 位址,Azure 球體防火牆只允許連線到其中一個位址。 應用程式可以使用 Curl 向具有多個 IP 位址的主機提出 HTTPS 要求;curl 會嘗試連線到每個 IP 位址,直到找到允許的位址為止。 不過,這可能會在應用程式找到允許的位址時造成延遲。