※ ChatGPTを利用し、要約された質問です(原文:ローカルエリア接続用イーサネットアダプタのMACアドレスを取得したい)
ローカルエリア接続用イーサネットアダプタのMACアドレスを取得する方法
このQ&Aのポイント
コマンドプロンプトで ipconfig /all を実行し、出力される情報の中から「イーサネット アダプタ ローカル エリア接続」のタイトルで表示されるアダプタのMACアドレスを取得する方法について説明します。
MACアドレスを取得する方法として、NetBIOSを使う方法、IP Helper APIのGetIfTable関数を使う方法、IP Helper APIのGetAdaptersInfo関数を使う方法を試しました。NetBIOSを使う方法ではアダプタの種類は判別できず、IP Helper APIのGetIfTable関数とGetAdaptersInfo関数ではイーサネットアダプタだけを選び出すことはできますが、複数のイーサネットアダプタが存在する場合に「ローカルエリア接続」のアダプタだけを選び出す情報は得られません。
LANに接続していない状態(ケーブルを外した状態)でMACアドレスを取得する方法についての情報はありません。
ローカルエリア接続用イーサネットアダプタのMACアドレスを取得したい
コマンドプロンプトで ipconfig /all を実行すると出てくる情報の中で,「イーサネット アダプタ ローカル エリア接続:」というタイトルで表示されるアダプタのMACアドレスを取得するプログラムを書きたいのです。
MACアドレスを取得する方法として,(1)NetBIOSを使う方法,(2)IP Helper APIのGetIfTable関数を使う方法,(3)IP Helper APIのGetAdaptersInfo関数を使う方法 を試しましたが,(1)はアダプタの種類は判別できず,(2)と(3)はイーサネットアダプタだけを選び出すことはできますが,複数のイーサネットアダプタが存在する場合(例えばBluetoothデバイス装着時),それらの中から「Bluetooth接続」のアダプタなどを除外して「ローカル エリア接続」のアダプタ『だけ』を選び出すための情報は得られないようです。
できれば,LANに接続していない状態(ケーブルを外した状態)で取得したいのですが,どなたかお知恵をお貸し下さい。
なお,「説明」の内容を使う方法,例えば GetAdaptersInfo関数のTIP_ADAPTER_INFO構造体のDescriptionメンバの文字列に「Bluetooth」が入っているものを除外するというような方法は使いたくありません。
よろしくお願い致します。
お礼
大変遅くなりましたが、改めてお礼申し上げます。ありがとうございました。
補足
早速のご回答,ありがとうございます。 残念ながら,getmacコマンドは Windows 98 や 2000 では使えないようですし,プログラムの中から呼び出すので,コマンドプロンプト利用というのも苦しいです。「ローカル エリア接続」という文字列が機種によって,あるいは今後のWindowsのバージョンで変わってしまう可能性もあるし。 ちなみに,「ローカル エリア接続」という文字列がレジストリのある場所に格納されている(これを変えると ipconfig コマンドの表示も変わる)ことは突き止めておりますので,レジストリからこの文字列を読み出し,これとすべてのアダプタの FriendlyName(GetAdaptersAddresses 関数が返す IP_ADAPTER_ADDRESSES 構造体のメンバ)とを比較して,一致するアダプタのMACアドレスを取得するというアイデアが浮かんだのですが,レジストリの構造が機種やWindowsのバージョンによらずに一定とは限らないだろうから,これも使えないだろうな・・・などと考えております。