プロが教える店舗&オフィスのセキュリティ対策術

コマンドプロンプトで 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」が入っているものを除外するというような方法は使いたくありません。

よろしくお願い致します。

A 回答 (1件)

あまりスマートな方法ではないですが、パっと思い浮かんだので・・・。



getmacコマンドとfindコマンドを組み合わせて望みのアダプタのみのMACアドレスが取得できます。
アダプタ名などの余計な情報も一緒に出てきてしまいますが、
とりあえず値を取ってしまって不要な部分を削除するってのはどうでしょうか?

取りあえず、下のバッチで特定のアダプタのみの結果が表示されます。
(findコマンドの後の""の中がアダプタ名)

@echo off
getmac /v|find "ローカル エリア接続"
pause

この回答への補足

早速のご回答,ありがとうございます。
残念ながら,getmacコマンドは Windows 98 や 2000 では使えないようですし,プログラムの中から呼び出すので,コマンドプロンプト利用というのも苦しいです。「ローカル エリア接続」という文字列が機種によって,あるいは今後のWindowsのバージョンで変わってしまう可能性もあるし。

ちなみに,「ローカル エリア接続」という文字列がレジストリのある場所に格納されている(これを変えると ipconfig コマンドの表示も変わる)ことは突き止めておりますので,レジストリからこの文字列を読み出し,これとすべてのアダプタの FriendlyName(GetAdaptersAddresses 関数が返す IP_ADAPTER_ADDRESSES 構造体のメンバ)とを比較して,一致するアダプタのMACアドレスを取得するというアイデアが浮かんだのですが,レジストリの構造が機種やWindowsのバージョンによらずに一定とは限らないだろうから,これも使えないだろうな・・・などと考えております。

補足日時:2009/09/02 12:41
    • good
    • 0
この回答へのお礼

大変遅くなりましたが、改めてお礼申し上げます。ありがとうございました。

お礼日時:2013/10/01 07:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!