2013-03-31 63 views
4

問題:我正在開發分佈式CPU/GPU模擬器的圖形前端。由於該模擬器使用MPI,因此它需要一個hostfile來詳細說明網絡上所有計算機的主機名,以便它知道要分配哪些計算機。由於我的應用程序的最終用戶不是計算機科學家(甚至可能不是計算機專業人員),所以我不能期望他們知道/找到網絡/集羣中每臺計算機的主機名。我想以編程方式執行此主機名發現,以便在應用程序啓動時,用戶可以看到可用的機器,並從中選擇他們想要運行的主機。如果可能的話,我希望這個解決方案是跨平臺的,但由於模擬器目前包含一些Linux依賴關係,所以我可以處理一個僅限於Linux的解決方案。網絡上所有機器的主機名搜索

我已經試過到目前爲止:我試圖利用nmap包使用的IP地址範圍爲本地網絡發現主機有命令在網絡上像nmap -sP <ip address range>。但是,它只會轉儲主機的IP地址(而不是主機名)和我不確定如何將這些IP地址轉換爲ssh主機名(因爲MPI使用ssh進行主機發現)。另外,我使用ping提供的廣播地址類似的方法,並且返回了幾乎相同的結果。

我對這個問題的廣泛性質和缺乏代碼表示歉意,但我對網絡探測/編程不是很有經驗,我真的不知道從哪裏開始。我試着用google搜索,但是我找不到合適的選項(可能是因爲我的經驗不足導致我使用不正確的術語觸發不正確的結果)。我的背景主要是圖形和用戶界面編程,所以這比我的舒適區略微。

回答

5

如果給定主機名或IP地址以連接到SSH(不確定是否適用於具有主機特定配置的情況),SSH不在乎。大多數MPI實現並不在意,例如在Open MPI連接中,URIs地址都是數字的,所以帶有IP的主機文件將會很好。另一方面,HTTP服務器由於虛擬主機的事情而關心,在這種情況下,許多不同的站點解析爲相同的IP地址,但服務器通過Host HTTP標頭提供實際的主機名。

不請自來的建議:通過ping查找主機是好的,但它並不能保證你找到了運行SSH的機器。你最好掃描22端口開放接受TCP連接的系統:

$ nmap -oX -sT -p22 <ip range> 

-oX產生可以很容易地解析的XML輸出。 -oG也是自動分析掃描結果的一個很好的格式。同時運行SSH並不一定意味着用戶能夠登錄系統 - 例如它可以是網絡路由器或另一個可遠程管理的設備。還必須注意只顯示用戶可以登錄而無需提供密碼的機器,例如,使用RSA/DSA公共密鑰,否則啓動MPI作業將是一項非常繁瑣的任務。您可以測試的東西,如發現每個主機:

$ ssh -2 -o "PreferredAuthentications=gssapi-with-mic,hostbased,publickey" \ 
     <host> hostname 

此命令基本上排除了所有交互式的身份驗證方法。如果連接成功,它將輸出遠程機器的主機名。否則,您會從SSH客戶端獲得權限被拒絕的錯誤和非零退出代碼。