【问题标题】:Hostname discovery for all machines on a network网络上所有机器的主机名发现
【发布时间】:2013-03-22 00:10:06
【问题描述】:

问题:我正在为分布式 CPU/GPU 模拟器开发图形前端。由于此模拟器使用 MPI,它需要一个主机文件,详细说明网络上使用的所有计算机的主机名,以便它知道要在哪些机器上分发。由于我的应用程序的最终用户不是计算机科学家(甚至可能不是很懂计算机),我不能指望他们知道/找到他们网络/集群上每台计算机的主机名。我想以编程方式执行此主机名发现,以便在应用程序启动时,用户可以看到可用的机器,并从中选择他们想要运行的主机。如果可能的话,我希望这个解决方案是跨平台的,但由于模拟器当前包含一些 linux 依赖项,我可以处理仅 Linux 的解决方案。

到目前为止我所做的尝试:我尝试使用 nmap 包来使用诸如 nmap -sP <ip address range> 之类的命令来发现网络上的主机,并使用该本地网络的 IP 地址范围。但是,它只转储主机的 IP 地址(不是主机名),我不确定如何将这些 IP 地址转换为 ssh 主机名(因为 MPI 使用 ssh 进行主机发现)。此外,我使用了类似的方法,通过 ping 提供广播地址,它返回几乎相同的结果。

对于这个问题的广泛性和所显示代码的缺乏,我深表歉意,但我对网络探测/编程不是很有经验,我什至不知道从哪里开始。我尝试用谷歌搜索,但找不到合适的选项(可能是因为我缺乏经验导致我使用不正确的术语导致不正确的结果)我的背景主要是图形和用户界面编程,所以这有点超出我的舒适区.

【问题讨论】:

    标签: linux networking mpi hostname


    【解决方案1】:

    SSH 不关心它是否有主机名或 IP 地址来连接(不确定这是否适用于特定于主机的配置)。大多数 MPI 实现也不关心,例如在 Open MPI 连接中,URI 地址都是数字的,所以带有 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 客户端收到权限被拒绝错误和非零退出代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2021-12-06
      • 2021-06-14
      • 2016-09-12
      相关资源
      最近更新 更多