web-dev-qa-db-ja.com

WindowsのコマンドプロンプトでイーサネットMACアドレスのみを取得する方法はありますか?

ipconfig /allまたはgetmac /vを使用して、すべてのNIC物理アドレスを取得します。

しかし、問題は、通常、コンピューターには複数のNIC=カードがあります。また、Microsoft仮想Wi-FiホットスポットNICなど、いくつかの仮想MACアドレスがあり、wifiホットスポットがオンの場合にのみ表示されます。

では、コマンドプロンプトでイーサネットに対応するアドレスのみを収集するにはどうすればよいですか?

出力:(getmac /fo csv /vおよびwifiホットスポットオフを使用)

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

出力:(getmac /fo csv /vおよびwifiホットスポットを使用してオン)

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

私のすべてのアダプターのリスト:(wmic nic) http://Pastebin.com/zyz9LjJe

[〜#〜] update [〜#〜](可能な解決策):@DavidPostillと@wmzの両方の回答が非常に役立ちました。最後に、仮想MACアドレスを持つすべての仮想アダプターを排除するソリューションを取得しました。 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アドレスは、仮想MACアダプターで最も使用されます。 https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines

したがって、getmacコマンドですべてのMACアドレスを取得した後、正規表現を使用してそれらの仮想MACアドレスを除外できます。さらに、「ローカルエリア接続」によるフィルタリングよりも、「wi-fi」によるMACのフィルタリングの方が信頼性が高いことがわかります。したがって、名前に「wi-fi」が含まれる接続を除外して、最終的なLAN /イーサネット接続を取得します。

6
Sourav Ghosh

コマンドプロンプトからイーサネットMACアドレスのみを取得する方法はありますか?

組み込みコマンドの1行の(しかし複雑な)シーケンスを使用して、必要なことを実行できます。

コマンドラインから:

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

バッチファイルから:

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

それはどのように機能しますか?

以下を使用できます。

getmac /fo csv /v

メディアアクセスコントロール(MAC)アドレスと、すべてのローカルネットワークカードの各アドレスに関連付けられているネットワークプロトコルのリストを取得します。

/vオプションを使用して、詳細な出力(「接続名」を含む)を取得します。 「接続名」は、どのアダプタがEthernet接続であるかを識別できるように、後で必要になります。

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

|この出力をfindにパイプすると、Ethernet接続(接続名「ローカルエリア接続」を持つ)のみの情報を抽出できます。

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

「ローカルエリア接続」情報をcsv(カンマ区切り)形式で次のように返します。

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

3番目の(カンマ区切り)値はMACアドレスです。

次に、forコマンドを使用して、上記の文字列からMACアドレスのみを抽出します。

文字列はforコマンドに渡されます( ` (逆引用符)文字とusebackq

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

次のように、カンマ区切りのstringから3番目のトークン(値)を返します。

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

%~aは、引用符を文字列から削除するために使用されます。

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

最後に、変数MACF0-BF-97-62-95-5Dに設定されます。

set MAC=%~a

バッチファイルでは、すべての%%%に置き換える必要があることに注意してください。


さらに再調査

  • Windows CMDコマンドラインのA-Zインデックス -Windows cmdラインに関連するすべてのものの優れたリファレンス。
  • find -ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
  • for/f -別のコマンドの結果に対してコマンドをループします。
  • getmac -ローカルまたはネットワーク全体で、各コンピューターのすべてのネットワークカードのメディアアクセスコントロール(MAC)アドレスと各アドレスに関連付けられたネットワークプロトコルのリストを表示します。
  • parameters -コマンドライン引数(またはパラメーター)は、バッチスクリプトに渡される任意の値です。
  • set -CMD環境変数を表示、設定、または削除します。 SETで行われた変更は、現在のCMDセッションの間のみ保持されます。
9
DavidPostill

wmicの使用

(イーサネット接続インターフェースのみ)

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

利用可能なプロパティの詳細: https://msdn.Microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

編集:デビッドが指摘したように、これはWiFiアダプターも返します(OPが必要とするものとしない場合があります)。 (接続名に基づいて)LANアウト以外のものをフィルターする迅速で汚れた方法:

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

5
wmz

Powershellでは、次のようにします(Windows 8には、Windows 7に同梱されていないGet-NetAdapterコマンドレットが搭載されています)。

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

Macアドレスをファイルに書き込むための少し簡単な解決策を見つけたようです

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

マシンのMACアドレスを取得し、ディスクDにあるファイルmac.txtに書き込みます。

コードの説明:/ Fキーを使用して、@ FORコマンド 'getmac/fo table/nh'( ''で指定)を循環させ、コマンド実行の結果を変数iに割り当てることを指定します。次に、ECHOを使用して変数iの値をファイルに書き込みます。使った

getmac /fo table /nh

getmac/fo csvよりも簡単な出力を取得するこれは、getmac/fo table/nhの出力がどのように見えるかです。

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

したがって、この文字列を@FORサイクルに渡すだけでよく、デフォルトでは、この場合、最初のスペースの前にファイルを読み取り(特別なキーを定義する必要はありません)、変数iに読み取り値を割り当てます。次に、その値をECHOコマンドでファイルに書き込みます

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

>>はファイルに情報を追加し、>はファイルを上書きすることに注意してください。

0
alive-one