我需要编写一个脚本,在本地计算机上获取主机名和所有物理地址。它将在几台机器上运行。
经过一些研究,我发现我可以从$HOSTNAME
变量中获取主机名,并且我还找到了getmac
命令。
getmac
的问题在于它返回所有mac地址(环回,逻辑等),而没有任何关于它使用的接口的线索。这是我的示例输出:
2C-27-D7-40-62-7A \Device\Tcpip_{A04C5C9D-CD41-48D1-8EC8-54128C70835C}
32-9D-DE-C7-3F-6D \Device\Tcpip_{EB38E492-9BEF-4F8F-98E6-C08716920461}
02-90-4C-4F-4F-50 \Device\Tcpip_{42DB7C91-BB9E-4BF4-B374-289F1BBA7AC6}
它给了我3个mac地址,其中只有一个是物理的,但是我没有看到决定哪一个的方法。你能帮我吗?
答案 0 :(得分:3)
因为你提到了cygwin,'awk'会解决它...对于一般的Windows执行,即使AWK也可以单独下载GNU-Win32 utils。
当您执行“$ getmac -V -FO LIST”时,它会显示网络设备的名称,然后您可以获取所需的MAC地址,如下所示:
[以太网卡]
表示“本地连接”文字标记卡〜
$ getmac -V -FO CSV | awk -F ',' '{if(match($1,"Local Area Connection"))print $3;}'
[无线网卡]
用于“无线网络连接”文字标记卡〜
$ getmac -V -FO CSV | awk -F ',' '{if(match($1,"Wireless Network Connection"))print $3;}'
如果您有多个以太网/无线卡,名称可能会有所改变......您可以使用“$ getmac -V”检查实际名称,并根据需要进行匹配。
答案 1 :(得分:2)
只需解析ipconfig /all
我认为你只对连接到外部的“真正”适配器感兴趣。 根据同样存在的IP地址/默认网关信息,确定哪个是哪个应该相对简单。
请注意,从Windows到Windows版本,ipconfig输出略有不同。 如果你在“:”上分割线条,你就可以了。不要认为:始终出现在同一列中。
答案 2 :(得分:0)
您还可以解析ipconfig /all
的输出,这是一个Windows实用程序,它将为您提供接口名称及其MAC地址。我不是100%确定哪些Windows平台支持此实用程序,但它确实存在于从NT到XP的系统中。
它确实从Cygwin bash shell执行。