簡體   English   中英

網絡上所有計算機的主機名發現

[英]Hostname discovery for all machines on a network

問題 :我正在為分布式CPU / GPU模擬器開發圖形前端。 由於此模擬器使用MPI,因此需要一個主機文件,詳細說明網絡上使用的所有計算機的主機名,以便它知道要分配的計算機。 由於我的應用程序的最終用戶不是計算機科學家(甚至可能不是計算機知識),我不能指望他們知道/找到他們網絡/集群上每台計算機的主機名。 我想以編程方式執行此主機名發現,以便在應用程序啟動時,用戶可以看到可用的計算機,然后從中選擇要運行的主機。 如果可能的話,我希望這個解決方案是跨平台的,但由於模擬器目前包含一些Linux依賴項,我可以處理僅Linux的解決方案。

到目前為止我嘗試過:我嘗試使用nmap包來發現網絡上的主機,使用nmap -sP <ip address range>nmap -sP <ip address range>使用該本地網絡的ip地址范圍。 但是,它只轉儲主機的IP地址(而不是主機名), 我不知道如何將這些IP地址轉換為ssh主機名 (因為MPI使用ssh進行主機發現)。 另外,我使用類似的方法,ping提供廣播地址,它返回幾乎相同的結果。

我為這個問題的廣泛性和缺少的代碼道歉,但我對網絡探測/編程不是很有經驗,我甚至不確定從哪里開始。 我試過谷歌搜索,但我無法找到合適的選項(可能是因為我缺乏經驗導致我使用不正確的術語觸發不正確的結果)我的背景主要是圖形和用戶界面編程,所以這有點超出我的舒適區。

SSH不關心是否給出了要連接的主機名或IP地址(當有特定於主機的配置時,不確定是否適用)。 大多數MPI實現也不關心,例如在Open MPI連接中,URI地址都是數字,因此具有IP的主機文件可以正常使用。 另一方面,HTTP服務器關心的是虛擬主機事件,其中許多不同站點解析為相同的IP地址,但服務器通過Host HTTP頭提供實際主機名。

未經請求的建議:通過ping查找主機很好,但它並不能保證您找到了正在運行SSH的計算機。 您最好掃描接受TCP連接的端口22打開的系統:

$ 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客戶端獲得權限被拒絕錯誤和非零退出代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM