Gibt es eine Möglichkeit, über die Eingabeaufforderung in Windows nur die Ethernet-MAC-Adresse abzurufen?

Gibt es eine Möglichkeit, über die Eingabeaufforderung in Windows nur die Ethernet-MAC-Adresse abzurufen?

Ich verwende ipconfig /alloder, getmac /vum alle physischen NIC-Adressen abzurufen.

Das Problem ist jedoch, dass ein Computer im Allgemeinen über mehr als eine NIC-Karte verfügt. Außerdem gibt es einige virtuelle MAC-Adressen – wie die Microsoft Virtual Wi-Fi Hotspot NIC – die nur angezeigt werden, wenn der WLAN-Hotspot eingeschaltet ist.

Wie kann ich also über die Eingabeaufforderung nur die Adresse erfassen, die dem Ethernet entspricht?

Ausgabe: (Verwendung getmac /fo csv /vund WLAN-Hotspot AUS)

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

Ausgabe: (mit getmac /fo csv /vWLAN-Hotspot EIN)

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

Liste aller meiner Adapter: (wmic nic) http://pastebin.com/zyz9LjJe

AKTUALISIEREN (mögliche Lösung): Sowohl die Antwort von @DavidPostill als auch von @wmz hat mir sehr geholfen. Endlich habe ich eine Lösung, um alle virtuellen Adapter mit virtueller MAC-Adresse zu eliminieren. 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-Adressen mit diesen Bereichen werden am häufigsten von virtuellen MAC-Adaptern verwendet. https://serverfault.com/questions/40712/welchen-Bereich-von-Mac-Adressen-kann-ich-sicher-für-meine-virtuellen-Maschinen-verwenden

Nachdem wir also alle MAC-Adressen per getmacBefehl erhalten haben, können wir diese virtuellen MAC-Adressen mithilfe regulärer Ausdrücke herausfiltern. Außerdem stellen wir fest, dass das Filtern von MAC nach „WLAN“ zuverlässiger ist als das Filtern nach „LAN-Verbindung“. Also filtern wir Verbindungen mit „WLAN“ im Namen heraus, um die endgültige LAN/Ethernet-Verbindung zu erhalten.

Antwort1

Gibt es eine Möglichkeit, nur die Ethernet-MAC-Adresse über die Eingabeaufforderung abzurufen?

Sie können das gewünschte Ziel mithilfe einer einzeiligen (aber komplizierten) Folge integrierter Befehle erreichen.

Von der Befehlszeile aus:

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

Aus einer Batchdatei:

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

Wie funktioniert es?

Wir können benutzen:

getmac /fo csv /v

Zum Abrufen der Media Access Control (MAC)-Adresse und der Liste der mit jeder Adresse verknüpften Netzwerkprotokolle für alle lokalen Netzwerkkarten.

Verwenden Sie die /vOption, um eine ausführliche Ausgabe zu erhalten (die den „Verbindungsnamen“ enthält). Der „Verbindungsname“ wird später benötigt, damit wir identifizieren können, welcher Adapter die EthernetVerbindung ist:

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

Wenn wir |diese Ausgabe weiterleiten, findkönnen wir nur die Informationen für die EthernetVerbindung extrahieren (die den Verbindungsnamen „LAN-Verbindung“ hat):

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

Gibt die Informationen zur „LAN-Verbindung“ im CSV-Format (durch Kommas getrennt) wie folgt zurück:

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

Der dritte (durch Komma getrennte) Wert ist die MAC-Adresse.

Jetzt verwenden wir den forBefehl, um nur die MAC-Adresse aus der obigen Zeichenfolge zu extrahieren.

Die Zeichenfolge wird an den forBefehl übergeben (durch Verwendung des `Zeichens (Backquote) zusammen mit usebackq:

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

Gibt das 3. Token (Wert) ab dem durch Kommas getrennten Wert stringwie folgt zurück:

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

%~awird verwendet, um die Anführungszeichen aus der Zeichenfolge zu entfernen. Übrig bleibt:

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

Schließlich wird die Variable wie folgt MACgesetzt F0-BF-97-62-95-5D:

set MAC=%~a

Beachten Sie, dass in einer Batchdatei jedes %durch ersetzt werden muss %%.


Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
  • finden- Suchen Sie in einer Datei nach einer Textzeichenfolge und zeigen Sie alle Zeilen an, in denen sie gefunden wird.
  • für /f- Befehl mit den Ergebnissen eines anderen Befehls wiederholen.
  • getmac- Zeigen Sie die Media Access Control (MAC)-Adresse und die Liste der mit jeder Adresse verknüpften Netzwerkprotokolle für alle Netzwerkkarten in jedem Computer an, entweder lokal oder über ein Netzwerk.
  • Parameter– Ein Befehlszeilenargument (oder Parameter) ist ein beliebiger Wert, der an ein Batch-Skript übergeben wird.
  • Satz- CMD-Umgebungsvariablen anzeigen, festlegen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung bestehen.

Antwort2

Verwenden vonwmic

(Nur über Ethernet verbundene Schnittstellen)

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

Weitere Informationen zu den verfügbaren Immobilien: https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

Bearbeiten: Wie David bemerkt hat, wird hier auch der WLAN-Adapter zurückgegeben (was OP vielleicht will, vielleicht aber auch nicht). Schnelle und einfache Methode, um alles außer LAN herauszufiltern (basierend auf dem Verbindungsnamen):

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

Antwort3

In Powershell würden Sie dies folgendermaßen tun (Windows 8 verfügt über das Cmdlet „Get-NetAdapter“, das nicht im Lieferumfang von Windows 7 enthalten ist):

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

Antwort4

Es scheint, ich habe eine etwas einfachere Lösung gefunden, um die Mac-Adresse in eine Datei zu schreiben

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

ruft die MAC-Adresse des Rechners ab und schreibt sie in die Datei mac.txt auf Datenträger D:

Code-Erklärung: Mit der Taste /F geben wir an, dass wir an den Zyklus @FOR einen Befehl 'getmac /fo table /nh' (angegeben durch '') übergeben und das Ergebnis der Befehlsausführung der Variable i zuweisen. Dann verwenden wir ECHO, um den Wert der Variable i in die Datei zu schreiben. Ich habe

getmac /fo table /nh

um eine einfachere Ausgabe als getmac /fo csv zu erhalten So sieht die Ausgabe von getmac /fo table /nh aus

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

Wir müssen also nur diesen String an den @FOR-Zyklus übergeben, der in diesem Fall standardmäßig die Datei vor dem ersten Leerzeichen liest (keine Notwendigkeit, spezielle Tasten zu definieren) und den gelesenen Wert der Variable i zuweist. Dann schreiben wir ihren Wert mit dem ECHO-Befehl in die Datei

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

Beachten Sie, dass >> der Datei Informationen hinzufügt, während > die Datei überschreibt.

verwandte Informationen