2011-09-01 106 views
3

我需要编写一个脚本,该脚本可以在本地计算机上获取主机名和所有物理地址。它将在几台机器上运行。 经过一番研究,我发现我可以从$HOSTNAME变量中获得主机名,并且我还发现了getmac命令。 getmac的问题是它返回所有的MAC地址(回送,逻辑等),而没有任何有关它使用的接口的线索。这是我的例子输出:使用Cygwin获取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地址,其中只有一个是物理,但我没有看到决定哪一个方式。你可以帮我吗?

回答

3

因为您提到了cygwin,'awk'会对它起作用......对于一般的窗口执行,即使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“并根据需要进行匹配。

+0

太棒了!这正是我所期待的。谢谢。 – Jandrejc

0

您还可以解析ipconfig /all这是一个Windows实用程序的输出,它会为您提供接口名称以及它们的MAC地址。我不是100%确定哪个Windows平台支持此实用程序,但它确实存在于从NT到XP的系统上。

它从Cygwin bash shell执行。

+0

它是唯一的选择吗?我试图避免解析 – Jandrejc

+2

我不知道任何方法来避免解析。 Windows只是没有像这样的事情体面的命令行工具。 Ipconfig相对容易(即使在普通的Windows CMD脚本中)。另一种方法是从Powershell中查询WMI数据,这些数据要复杂得多。 – Tonny

2

只是解析来自ipconfig /all

输出我想你只能在连接到外部的“真实”的适配器感兴趣.. 基于IP地址/默认网关的信息,这也是在那里它应该要确定哪个是相对简单的。

被警告ipconfig输出从Windows到Windows版本略有不同。 如果你分割“:”上的行,你很好。不要认为:总是出现在同一列中。