2011-11-16 61 views
4

我在另一個物理網絡上的另一個遠程系統上有一個服務,它的多播包沒有到達我的本地系統,因此我沒有看到它的DNS- SD發佈的服務。dns-sd:如何手動註冊遠程服務

我有一種方法,我可以在我的本地機器上手動註冊它,以便只顯示DNS-SD發現的服務的應用程序顯示它?

回答

7

通過使用avahi-publish可以創建Avahi臨時註冊,並且可以通過編寫靜態服務文件來創建持久性註冊。有關前者的更多信息,請參見man 1 avahi-publish;有關更多信息,請參見man 5 avahi.service

使用Bonjour的DNS-SD工具可用於代理註冊服務:

dns-sd -P <Name> <Type> <Domain> <Port> <Host> <IP> [<TXT>...]

如果服務您代理登記已經有一個單播DNS主機名像這樣將工作:

$ dns-sd -P Google _http._tcp local 80 google.com google.com path=/ 
Registering Service Google._http._tcp.local host google.com port 80 TXT path=/ 
4:23:00.928 Got a reply for service Google._http._tcp.local.: Name now registered and active 
^C 

如果沒有主機名的唯一名稱應該用於主機:

$ dns-sd -P Google _http._tcp local 80 google.local 74.125.237.144 path=/ 
Registering Service Google._http._tcp.local host google.local port 80 TXT path=/ 
4:16:48.208 Got a reply for record google.local: Name now registered and active 
4:16:48.208 Got a reply for service Google._http._tcp.local.: Name now registered and active 
^C 
+0

我在Mac上,我在這裏有'dns-sd'。而在其手冊中,我沒有辦法做到我想要的。 – Albert

+0

我假設你使用的是Avahi,因爲問題被標記爲Avahi,但不是mDNSResponder或Bonjour。我已經用dns-sd工具的示例用法更新了我的答案。 – andrewtj

0

這就是我正在尋找的。我想從家庭網絡外部看到一個位於非OS X系統上的服務。在其他地方就在這裏,我發現瞭如何使用scutil找出我回到我的Mac網絡:

echo show Setup:/Network/BackToMyMac | scutil | sed -n 's/.* : *\(.*\).$/\1/p' 

所以,我完全可以接受,並用它來填充這個:

BTMM=`echo show Setup:/Network/BackToMyMac | scutil | sed -n 's/.* : *\(.*\).$/\1/p'` 

dns-sd -P <advertised host name> _ssh._tcp ${BTMM} 22 <real host name> <real IP address—could be a hostname if it resolves> path=/ 

的美麗這就是說,只要某個ZeroConf變體正在運行,我在離開家之前不必記得做任何事情。我可以在任何地方宣傳遠程服務,使用它,然後取下廣告。所以我運行命令,然後看看我的外殼 - >新的遠程命令對話框,它就在那裏。然後,我可以隨意複製文件,運行命令,訪問家庭網絡,就好像我在那裏一樣。