由于我们的(例如!:-) 网络管理员的一些松懈的记录,我的任务是查找我们公司中存在哪些 QNAP 和 Synology NAS 设备。我们在英国有数百个办事处,它们都是独立的网络和独立的域。它们都是基于 Windows 的(Server 2k3、2008 和 2012 的混合版本)。我们运行我们自己的自制监控软件,允许我远程运行我想要的任何软件。
QNAP 和 Synology 具有独特的 MAC 地址,因此如果我可以扫描网络以查找 MAC 地址并将输出传输到文件,我可以轻松获得所需的信息。问题是如何获取 LAN 上所有 MAC 地址的列表。
显而易见的第一步就是运行arp -a,我可能会继续执行此操作。但是,这只会显示服务器在 arp 缓存超时内看到的设备。有谁知道获取所有设备的简单方法?简单我的意思是 Windows 内置的东西——我不想安装任何软件,因为我们谈论的是数百个不同的办公室。在这些场合往往会提到 nmap,但 Windows 端口似乎需要安装额外的库。如果我必须使用外部扫描仪,最好有一个可以复制到服务器并运行的可执行文件。
PS:快速澄清:
扫描仪需要是一个命令行应用程序,以便我可以远程启动它并将输出转到一个文件以供后续解析。它不能依赖 Java,因为不能保证所有服务器都有 Java。我相当肯定所有服务器都至少有 .Net 2.0 - 我想在紧要关头我可以打开一个快速的 .Net 2.0 应用程序来 ping 网络上每个可能的地址并获取与任何回复相关联的 MAC 地址......
最快/最简单的方法通常是从您的交换机中获取 arp 表(假设您有托管交换机,否则,请准备好承受很多痛苦)并根据分配给网卡制造商的 MAC 地址过滤它们(s ) 您正在寻找。 我倾向于使用此站点将 MAC 链接到供应商,反之亦然,但肯定还有其他站点。
如果您的交换机不受管理,因此您不能轻松地从中央位置提取 arp 表,那么下一个最佳方法是在您可以广播的每个网段上找到一台机器,然后查找本地 arp 表。哪个...远非理想,但确实是许多糟糕选择中的最佳解决方案。我不会像您在问题中建议的那样对所有这些机器进行交互式登录,而是使用某种方法从中央位置(例如您的工作站)获取远程命令行。WinRM、PowerShell 远程处理甚至 PSexec 都是实现这一目标的相对简单的选择,它们可能适合也可能不适合您,具体取决于您的环境设置方式。
哦,让我补充一下,而不是 ping 每个地址,或者编写一个应用程序来执行此操作,如果这是您最终的路由,那么只需点击每个子网的广播地址或全球广播地址会更快去。(广播地址是
.255
最后一个八位字节中的地址,全局广播地址是255.255.255.255
。)你试过
Angry IP Scanner
吗?我似乎记得那是一个单一的可执行文件。
我之前在 Linux 上使用过 Fing,它可以在命令行上运行并输出到命令行。
如果您可以预测地找到已安装的卷,则可以识别 IP 地址,然后追踪它是否是您的错误设备之一。您将需要在
net use
本地执行命令,或查看注册表中的任何持久映射驱动器。然后,通过探测名称本身以获取信息,或者尝试从服务器 ping 将返回 MAC 地址。