Existe uma maneira de obter apenas o endereço MAC Ethernet via prompt de comando no Windows?

6

Eu uso ipconfig /all ou getmac /v para obter todos os endereços físicos da NIC.

Mas o problema é que geralmente um computador tem mais de uma placa NIC. Além disso, há alguns endereços MAC virtuais, como a NIC de ponto de acesso Wi-Fi virtual da Microsoft, que são exibidos apenas quando o ponto de acesso Wi-Fi está ativado.

Então, como posso coletar apenas o endereço correspondente à Ethernet via prompt de comando?

output: (usando getmac /fo csv /v e hotspot wifi desativado)

"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"

output: (usando getmac /fo csv /v e wifi hotspot ON)

"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}"

Lista de todos os meus adaptadores: (wmic nic) link

UPDATE (solução possível) : a resposta de @DavidPostill e @wmz me ajudou muito. finalmente eu tenho uma solução para eliminar todos os adaptadores virtuais com endereço MAC virtual. x2-xx-xx-xx-xx-xx x6-xx-xx-xx-xx-xx xA-xx-xx-xx-xx-xx xE-xx-xx-xx-xx-xx

Os endereços MAC com essas faixas são mais usados pelos adaptadores MAC virtuais. link

Então, depois de obter todos os endereços MAC pelo comando getmac , podemos filtrar os endereços MAC virtuais usando expressões regulares. Além disso, notamos que filtrar MAC por "wi-fi" é mais confiável do que filtrar por "conexão de área local". Por isso filtramos as conexões com "wi-fi" dentro de seus nomes para obter uma conexão LAN / Ethernet final.

    
por Sourav Ghosh 23.03.2015 / 00:25

3 respostas

8

Existe uma maneira de obter apenas o endereço MAC Ethernet via prompt de comando?

Você pode fazer o que você precisa usando uma sequência de uma linha (mas complicada) de comandos incorporados.

Na linha de comando:

for /f "usebackq tokens=3 delims=," %a in ('getmac /fo csv /v ^| find "Local Area Connection"') do set MAC=%~a

De um arquivo em lotes:

for /f "usebackq tokens=3 delims=," %%a in ('getmac /fo csv /v ^| find "Local Area Connection"') do set MAC=%%~a

Como isso funciona?

Podemos usar:

getmac /fo csv /v

Para obter o endereço MAC (Media Access Control) e a lista de protocolos de rede associados a cada endereço para todas as placas de rede locais.

Use a opção /v para obter uma saída detalhada (que inclui o "Nome da Conexão"). O "Nome da Conexão" é necessário mais tarde para que possamos identificar qual adaptador é a Ethernet connection:

"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"

Se canalizarmos | desta saída para find , podemos extrair as informações apenas para a Ethernet connection (que tem o nome da conexão "Local Area Connection"):

getmac /fo csv /v ^| find "Local Area Connection"

Retorna a informação "Conexão de Área Local" no formato csv (delimitado por vírgulas) da seguinte forma:

"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"

O terceiro valor (delimitado por vírgula) é o endereço MAC.

Agora usamos o comando for para extrair apenas o endereço MAC da string acima.

A string é passada para o comando for (usando o caractere ' (backquote) junto com usebackq :

for /f "usebackq tokens=3 delims=," %a in ('string') do

Retorna o terceiro token (valor) da string delimitada por vírgula da seguinte forma:

"F0-BF-97-62-95-5D"

%~a é usado para remover as aspas da string, deixando:

F0-BF-97-62-95-5D

Finalmente a variável MAC está definida como F0-BF-97-62-95-5D :

set MAC=%~a

Observe em um arquivo de lote que todos os % devem ser substituídos por %% .

Continuação da reedição

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • find - Procure uma string de texto em um arquivo & exibir todas as linhas onde ele é encontrado.
  • para / f - Comando Loop contra os resultados de outro comando.
  • getmac - Exibe o endereço MAC (Controle de Acesso à Mídia) e a lista de protocolos de rede associados a cada endereço para todas as placas de rede em cada computador, localmente ou através de uma rede.
  • parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.
  • definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
por 23.03.2015 / 09:55
5

Usando wmic

(somente interfaces conectadas via Ethernet)

wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress

Mais informações sobre as propriedades disponíveis: link

Edit: Como David observou, isso também retorna o adaptador WiFi (que pode ou não ser o que o OP quer). Maneira rápida e suja de filtrar qualquer coisa que não seja LAN out (com base no nome da conexão):

wmic nic where "NetConnectionId like '%Local Area%' and AdapterTypeId=0 AND netConnectionStatus=2" get MACAddress

    
por 23.03.2015 / 11:54
2

No PowerShell, você faria assim (o Windows 8 apresenta o Cmdlet Get-NetAdapter que não é fornecido com o Windows 7):

(get-wmiobject win32_networkadapter -Filter "AdapterType LIKE 'Ethernet 802.3'") | select -expand macaddress
11:22:33:45:04:1E
    
por 23.03.2015 / 11:09