
Utilizo ipconfig /all
o getmac /v
para 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 /v
un 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 /v
un 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 getmac
comando, 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 /v
opció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 Ethernet
conexió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, find
podemos extraer la información solo para la Ethernet
conexió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 for
comando para extraer solo la dirección MAC de la cadena anterior.
La cadena se pasa al for
comando (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 string
de la siguiente manera:
"F0-BF-97-62-95-5D"
%~a
se utiliza para eliminar las comillas de la cadena, dejando:
F0-BF-97-62-95-5D
Finalmente la variable MAC
se 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.