¿Hay alguna manera de obtener solo la dirección MAC de Ethernet mediante el símbolo del sistema en Windows?

¿Hay alguna manera de obtener solo la dirección MAC de Ethernet mediante el símbolo del sistema en Windows?

Utilizo ipconfig /allo getmac /vpara obtener todas las direcciones físicas de NIC.

Pero el problema es que, generalmente, una computadora tiene más de una tarjeta NIC. También hay algunas direcciones MAC virtuales, como la NIC de punto de acceso Wi-Fi virtual de Microsoft, que se muestra solo cuando el punto de acceso wifi está activado.

Entonces, ¿cómo puedo recopilar solo la dirección correspondiente a Ethernet mediante el símbolo del sistema?

salida: (usando getmac /fo csv /vun punto de acceso wifi APAGADO)

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

salida: (usando getmac /fo csv /vun punto de acceso wifi activado)

"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 mis adaptadores: (wmic nic) http://pastebin.com/zyz9LjJe

ACTUALIZAR (solución posible): la respuesta de @DavidPostill y @wmz me ayudó mucho. Finalmente obtuve una solución para eliminar todos los adaptadores virtuales con dirección 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

Las direcciones MAC con estos rangos son las que más utilizan los adaptadores MAC virtuales. https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines

Entonces, después de obtener todas las direcciones MAC mediante getmaccomando, podemos filtrar esas direcciones MAC virtuales mediante expresiones regulares. Además, observamos que filtrar MAC mediante "wi-fi" es más fiable que filtrar mediante "conexión de área local". Así que filtramos las conexiones con "wi-fi" en sus nombres para obtener la conexión LAN/Ethernet final.

Respuesta1

¿Hay alguna manera de obtener solo la dirección MAC de Ethernet mediante el símbolo del sistema?

Puede hacer lo que necesite utilizando una secuencia de una línea (pero complicada) de comandos integrados.

Desde la línea de comando:

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

Desde un archivo por lotes:

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

¿Como funciona?

Nosotros podemos usar:

getmac /fo csv /v

Para obtener la dirección de Control de acceso a medios (MAC) y la lista de protocolos de red asociados con cada dirección para todas las tarjetas de red locales.

Utilice la /vopción para obtener una salida detallada (que incluye el "Nombre de la conexión"). El "Nombre de la conexión" se necesitará más adelante para que podamos identificar qué adaptador es la Ethernetconexión:

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

Si canalizamos |esta salida, findpodemos extraer la información solo para la Ethernetconexión (que tiene el nombre de conexión "Conexión de área local"):

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

Devuelve la información de "Conexión de área local" en formato csv (delimitado por comas) de la siguiente manera:

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

El tercer valor (delimitado por comas) es la dirección MAC.

Ahora usamos el forcomando para extraer solo la dirección MAC de la cadena anterior.

La cadena se pasa al forcomando (utilizando el `carácter (comillas invertidas) junto con usebackq:

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

Devuelve el tercer token (valor) de la coma delimitado stringde la siguiente manera:

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

%~ase utiliza para eliminar las comillas de la cadena, dejando:

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

Finalmente la variable MACse establece en F0-BF-97-62-95-5D:

set MAC=%~a

Tenga en cuenta que en un archivo por lotes cada archivo %debe reemplazarse por %%.


Lectura adicional

  • Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
  • encontrar- Busque una cadena de texto en un archivo y muestre todas las líneas donde se encuentra.
  • para /f- Comando de bucle contra los resultados de otro comando.
  • getmac- Muestra la dirección de Control de acceso a medios (MAC) y la lista de protocolos de red asociados con cada dirección para todas las tarjetas de red en cada computadora, ya sea localmente o a través de una red.
  • parámetros- Un argumento (o parámetro) de línea de comando es cualquier valor pasado a un script por lotes.
  • colocar- Mostrar, configurar o eliminar variables de entorno CMD. Los cambios realizados con SET permanecerán solo durante la sesión CMD actual.

Respuesta2

Usandowmic

(Solo interfaces conectadas a Ethernet)

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

Más información sobre propiedades disponibles: https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

Editar: Como señaló David, esto también devuelve el adaptador WiFi (que puede ser o no lo que OP quiere). Manera rápida y sucia de filtrar cualquier cosa que no sea la salida LAN (según el nombre de la conexión):

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

Respuesta3

En Powershell lo harías así (Windows 8 incluye el cmdlet Get-NetAdapter que no se incluye con Windows 7):

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

Respuesta4

Parece que he encontrado una solución un poco más sencilla para escribir la dirección Mac en un archivo.

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

obtendrá la dirección mac de la máquina y la escribirá en el archivo mac.txt ubicado en el disco D:

Explicación del código: con la tecla /F especificamos que pasamos al ciclo @FOR un comando 'getmac /fo table /nh' (especificado por '') y asignamos el resultado de la ejecución del comando a la variable i. Luego usamos ECHO para escribir el valor de la variable i en el archivo. solía

getmac /fo table /nh

para obtener una salida más simple que getmac /fo csv Así es como se ve la salida de getmac /fo table /nh

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

Entonces, solo necesitamos pasar esta cadena al ciclo @FOR que, de forma predeterminada, en este caso, leerá el archivo antes del primer espacio (no es necesario definir claves especiales) y asignará el valor de lectura a la variable i. Luego escribimos su valor en el archivo con el comando ECHO.

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

Tenga en cuenta que >> agregará información al archivo, mientras que > sobrescribirá el archivo.

información relacionada