好吧伙计们,这不是标题所暗示的通常容易回答的问题......
我需要从运行 Windows(从 XP 到 Server2012)的计算机获取 MAC 地址。我可以使用以下选项:
1) getmac - 总体来说不错,而且它返回 MAC 地址的格式也适合我,但是过去它曾给我带来过麻烦。
2)WMIC——总体来说还不错,但过去也给我带来过问题
,而且性能滞后(尤其是在低规格的机器上)。
3) ipconfing - 从命令输出中检索它的传统方法。可以工作,但如果存在多个接口,解析输出可能会很麻烦。
因此,问题如下。为了获取机器的 MAC 地址,上述所有方法的最佳替代方案是什么。请记住,我将通过 shell 脚本调用任何实用程序(无论这加起来是多少),并且我将在几个不同的 Windows 版本(从专业版到嵌入式 POS)上进行部署。
Powershell 显然不行,因为 XP 不支持它。另外,我想避免使用 WMIC 的原因是 1) 我遇到过许多错误的安装(导致严重问题)和 2) 因为某些 Windows 版本(例如嵌入式 XP)不包含它。
我曾尝试使用 ARP 表来获取它,但据我所知,它不会列出本地机器的 MAC 地址。
欢迎任何有用的提示或想法。
答案1
您可以使用 VBScript。代码http://www.robvanderwoude.com/vbstech_network_mac.php可以进行修改以获取您需要的信息。
VBScript 代码:
intCount = 0 strMAC = "" ' We're interested in MAC addresses of physical adapters only strQuery = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID > ''" Set objWMIService = GetObject( "winmgmts://./root/CIMV2" ) Set colItems = objWMIService.ExecQuery( strQuery, "WQL", 48 ) For Each objItem In colItems If InStr( strMAC, objItem.MACAddress ) = 0 Then strMAC = strMAC & "," & objItem.MACAddress intCount = intCount + 1 End If Next ' Remove leading comma If intCount > 0 Then strMAC = Mid( strMAC, 2 ) Select Case intCount Case 0 WScript.Echo "No MAC Addresses were found" Case 1 WScript.Echo "MAC Address: " & strMAC Case Else WScript.Echo "MAC Addresses: " & strMAC End Select
要求:Windows 版本:Windows NT 4 SP4、2000、XP、Server 2003 或 Vista
网络:TCP/IP
客户端软件:适用于 Windows NT 4 的 WMI CORE 1.5
脚本引擎:任意
总结:适用于 Windows NT 4 SP4(带 WMI CORE 1.5)、Windows 2000 或更高版本。不适用于 Windows 95、98 或 ME。
答案2
1.打开
CMD /a
2.
nbstat -A
输入{机器IP}3.“输入
4.输出 = 机器 NET-BIOS 信息,包括 MAC ID
您也可以使用-a
开关和machine name
(如果知道)
答案3
这可能有点超出您所能做的范围,但如果您拥有所有机器的 IP,它就完全可靠且简单。
转到核心交换机/路由器,或任何在同一子网中具有接口的设备。如果您无法访问路由器/交换机,则可以从同一子网中的 Windows 框执行此操作。
对所有 IP 执行 ping 操作或执行 ping 扫描,然后打印 arp 表。此时,您所要做的就是将其复制并粘贴到您最喜欢的文本处理程序(notepadd++、excel、linux 等)中,然后过滤掉您不需要的行。
无需依赖并不总是兼容或随机失败的讨厌的 Windows cmdlet,并且此方法适用于所有设备而不仅仅是 Windows。
答案4
Linux 有一个很棒的实用程序,名为arp-scan
,它可以扫描您的网络并生成一个包含 MAC 地址及其对应 IP 地址的表格。遗憾的是,它没有包含在 Knoppix 中。我不知道其他实时发行版是否如此。