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

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

Eu uso ipconfig /allou getmac /vpara obter todos os endereços físicos da NIC.

Mas o problema é que geralmente um computador possui mais de uma placa NIC. Também existem alguns endereços MAC virtuais – como o ponto de acesso Wi-Fi virtual da Microsoft NIC – 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?

saída: (usando getmac /fo csv /ve hotspot wi-fi desligado)

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

saída: (usando getmac /fo csv /ve hotspot wi-fi LIGADO)

"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) http://pastebin.com/zyz9LjJe

ATUALIZAR (solução possível): a resposta de @DavidPostill e @wmz me ajudou muito. finalmente consegui 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

Endereços MAC com esses intervalos são mais usados ​​por adaptadores MAC virtuais. https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines

Assim, depois de obter todos os endereços MAC por getmaccomando, podemos filtrar esses 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 local”. Portanto, filtramos as conexões com "wi-fi" em seus nomes para obter a conexão LAN/Ethernet final.

Responder1

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

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

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 lote:

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

Como funciona?

Podemos usar:

getmac /fo csv /v

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

Use a /vopção para obter saída detalhada (que inclui o "Nome da conexão"). O "Nome da Conexão" será necessário posteriormente para que possamos identificar qual adaptador é a Ethernetconexão:

"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 |essa saída, findpodemos extrair as informações apenas para a Ethernetconexão (que tem o nome de conexão "Conexão de área local"):

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

Retorna as informações de "Conexão Local" no formato csv (delimitado por vírgula) 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 forcomando para extrair apenas o endereço MAC da string acima.

A string é passada para o forcomando (usando o `caractere (aspas crases) junto com usebackq:

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

Retorna o terceiro token (valor) delimitado por vírgula stringda 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é definida como F0-BF-97-62-95-5D:

set MAC=%~a

Observe que em um arquivo em lote cada %deve ser substituído por %%.


Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • encontrar- Procure uma string de texto em um arquivo e exiba todas as linhas onde ela for encontrada.
  • para /f- Comando de loop em relação aos resultados de outro comando.
  • getmac- Exibe 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 em cada computador, localmente ou através de uma rede.
  • parâmetros- Um argumento (ou parâmetro) de linha de comando é qualquer valor passado para um script em lote.
  • definir- Exibir, definir ou remover variáveis ​​de ambiente CMD. As alterações feitas com SET permanecerão apenas durante a sessão CMD atual.

Responder2

Usandowmic

(Somente interfaces conectadas via Ethernet)

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

Mais informações sobre os imóveis disponíveis: https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

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

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

Responder3

No Powershell você faria assim (o Windows 8 apresenta o cmdlet Get-NetAdapter que não vem com o Windows 7):

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

Responder4

Parece que encontrei uma solução um pouco mais simples para escrever o endereço MAC em um arquivo

@FOR /F %%i IN ('getmac /fo table /nh') DO ECHO %%i >> D:\mac.txt

irá obter o endereço MAC da máquina e gravá-lo no arquivo mac.txt localizado no disco D:

Explicação do código: Com a tecla /F especificamos que passamos para o ciclo @FOR um comando 'getmac /fo table /nh' (especificado por '') e atribuímos o resultado da execução do comando à variável i. Então usamos ECHO para escrever o valor da variável i no arquivo. eu usei

getmac /fo table /nh

para obter uma saída mais simples que getmac /fo csv É assim que a saída de getmac /fo table /nh se parece

00-03-7F-50-5C-0D   \Device\Tcpip_{AD7B1C5C-5027-46A3-B693-95D01D7A0C6C}

Então, só precisamos passar esta string para o ciclo @FOR que, por padrão, neste caso, irá ler o arquivo antes do primeiro espaço (não há necessidade de definir chaves especiais) e atribuir o valor de leitura à variável i. Então escrevemos seu valor no arquivo com o comando ECHO

 DO ECHO %%i >> D:\mac.txt

Observe que >> adicionará informações ao arquivo, enquanto > substituirá o arquivo.

informação relacionada