Sou*_*osh 7 windows command-line ipconfig cmd.exe
我使用ipconfig /all
或getmac /v
来获取所有 NIC 物理地址。
但问题是,一般一台电脑有不止一个网卡。还有一些虚拟 MAC 地址——比如微软虚拟 Wi-Fi 热点网卡——它只在 wifi 热点打开时显示。
那么,如何通过命令提示符只收集以太网对应的地址呢?
输出:(使用getmac /fo csv /v
和wifi热点关闭)
"Connection Name","Network Adapter","Physical Address","Transport Name"
"Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi
p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}"
"Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60",
"Media disconnected"
输出:(使用getmac /fo csv /v
和wifi热点打开)
"Connection Name","Network Adapter","Physical Address","Transport Name"
"Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi
p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}"
"Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60",
"Media disconnected"
"Local Area Connection* 7","Microsoft Hosted Network Virtual Adapter","4A-E3-47-
D2-FB-60","\Device\Tcpip_{630B2924-03A8-41C1-B1F2-D981A4C263C6}"
我的所有适配器列表:(wmic nic) http://pastebin.com/zyz9LjJe
更新 (可能的解决方案):@DavidPostill 和 @wmz 的回答对我帮助很大。最后我得到了一个解决方案来消除所有具有虚拟 MAC 地址的虚拟适配器。
x2-xx-xx-xx-xx-xx
x6-xx-xx-xx-xx-xx
xA-xx-xx-xx-xx-xx
xE-xx-xx-xx-xx-xx
虚拟 MAC 适配器最常使用具有这些范围的 MAC 地址。 https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines
所以,通过getmac
命令获取所有MAC地址后,我们可以使用正则表达式过滤掉那些虚拟MAC地址。此外,我们注意到通过“wi-fi”过滤MAC比通过“本地连接”过滤更可靠。因此,我们过滤掉名称中带有“wi-fi”的连接,以获得最终的 LAN/以太网连接。
您可以使用一行(但很复杂)的内置命令序列来执行您需要的操作。
从命令行:
for /f "usebackq tokens=3 delims=," %a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%~a
Run Code Online (Sandbox Code Playgroud)
从批处理文件:
for /f "usebackq tokens=3 delims=," %%a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%%~a
Run Code Online (Sandbox Code Playgroud)
我们可以用:
getmac /fo csv /v
Run Code Online (Sandbox Code Playgroud)
获取媒体访问控制 (MAC) 地址和与所有本地网卡的每个地址关联的网络协议列表。
使用该/v
选项获取详细输出(包括“连接名称”)。稍后需要“连接名称”,以便我们可以识别哪个适配器是Ethernet
连接:
"Connection Name","Network Adapter","Physical Address","Transport Name"
"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"
"Wireless Network Connection","Atheros AR9285 Wireless Network Adapter","CC-AF-78-B2-4C-09","\Device\Tcpip_{B108BB0B-CCDC-4ACA-9DFE-5A2F17BC138D}"
"Bluetooth Network Connection","Bluetooth Device (Personal Area Network)","CC-AF-78-B2-4C-0A","Media disconnected"
Run Code Online (Sandbox Code Playgroud)
如果我们|
将此输出通过管道传输到find
我们可以仅提取Ethernet
连接的信息(连接名称为“本地连接”):
getmac /fo csv /v ^| find "Local Area Connection"
Run Code Online (Sandbox Code Playgroud)
以 csv(逗号分隔)格式返回“本地连接”信息,如下所示:
"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"
Run Code Online (Sandbox Code Playgroud)
第三个(逗号分隔)值是 MAC 地址。
现在我们使用该for
命令从上述字符串中提取 MAC 地址。
字符串被传递给for
命令(通过使用`(反引号)字符和usebackq
:
for /f "usebackq tokens=3 delims=," %a in (`string`) do
Run Code Online (Sandbox Code Playgroud)
返回逗号分隔的第三个标记(值)string
,如下所示:
"F0-BF-97-62-95-5D"
Run Code Online (Sandbox Code Playgroud)
%~a
用于从字符串中删除引号,留下:
F0-BF-97-62-95-5D
Run Code Online (Sandbox Code Playgroud)
最后变量MAC
设置为F0-BF-97-62-95-5D
:
set MAC=%~a
Run Code Online (Sandbox Code Playgroud)
注意批处理文件中的 each%
必须替换为%%
.
使用 wmic
(仅限以太网连接接口)
wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress
有关可用属性的更多信息:https : //msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx
编辑:正如大卫所指出的,这也会返回 WiFi 适配器(这可能是也可能不是 OP 想要的)。过滤除 LAN 以外的任何内容的快速而肮脏的方法(基于连接名称):
wmic nic where "NetConnectionId like '%Local Area%' and AdapterTypeId=0 AND netConnectionStatus=2" get MACAddress
归档时间: |
|
查看次数: |
31480 次 |
最近记录: |