• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Macアドレスの取得(ソースは書けたが不安です))

Macアドレスの取得方法と確率について

このQ&Aのポイント
  • Macアドレスを取得する方法は2つあります。1つ目の方法はWin32_NetworkAdapterConfigurationを使用し、MACアドレスがnullでない場合に取得します。2つ目の方法はIPGlobalPropertiesとNetworkInterfaceを使用し、GetAllNetworkInterfacesメソッドを呼び出してMACアドレスを取得します。
  • どちらの方法を使用してもMACアドレスを取得することができますが、確率には差があります。1つ目の方法はWin32_NetworkAdapterConfigurationを使用するため、より高い確率でMACアドレスを取得できます。2つ目の方法はIPGlobalPropertiesとNetworkInterfaceを使用するため、一部のネットワークインターフェースでMACアドレスが取得できない場合があります。
  • IPアドレスが複数ある場合については、どちらの方法でも問題ありません。MACアドレスはネットワークインターフェースごとに一意な値を持っており、複数のIPアドレスを持つ場合でも正確にMACアドレスを取得することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.2

詳しいくないので、役に立たない情報かも知れませんが…… > ネットワークの設定が不十分の場合、 物理的に NIC が端末に接続されていたとしても Windows から認識されていない状態と 「無効」としている場合も取得できないと思います。 (ドライバのインストールは完了していて、デバイスとして認識されていても) > 物理的なものと、もう一つ「MSアダプタ!?」みたい論理的 Visual Basic 2005 で可能な方法でということと、NIC の種別を絞りこむということであれば 下記のようなもの組み合わせれば可能かも知れません。 1. NetworkInterfaceType 見れば Ethernet であると判断できます。 2. Description の値からはデバイスマネージャに出てくるものと同じようなものが得られるので ある程度は判断の参考にはなるかと思います。 ※ 記述例としてはこんな感じ Label2.Text = adapter.Description 3. MAC アドレスの 24 ビットはベンダIDになっているのでそれで識別するという方法も ありますが、リストを持っている必要があるのであまり現実的ではないと思われます。 ※ 次のようなサイトで検索して探すことも可能ですが…… Vendor/Ethernet MAC Address Lookup and Search http://www.coffer.com/mac_find/ > 目的は、このパソコンはユニークの個体であるのを判別 ※ これは余計なことなのでスルーして頂いてかまいません。 # ソフトウェアの使用制限にでもお使いになるのでしょうか? # だとしたら、どれを使って登録するかをユーザに選ばせてその条件で # 登録コードなどを発行するほうが無難ではないでしょうか?

noname#147912
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.1

> どちらの方がより高い確率で取得できるのでしょう。 コードからして、おそらく .NET Framework 環境だとは思いますが 個人的には「二番目」のほうが無難かと思います。 読解力不足で申し訳ありませんが、この「より高い確立」とは何を 意味されてのことでしょうか? このコードで気になるのは次のことです。 # 動作確認のためのコードでこうなっているだけかとは思いますが ※ 引用が前後してしまいますが > For Each adapter In nics > Label2.Text = adapter.GetPhysicalAddress().ToString() > Exit For NIC が複数存在する場合、最初に見付かった NIC が必ずしも所望の インターフェースであるとは限らないので、限られた環境(NIC が 一つしかない)の場合以外で運用される場合は避けるべきではない でしょうか?

noname#147912
質問者

補足

ご回答ありがとうございます。薄識のため、万が一適当なことを言ったらごめんなさい。VB2005です。ちなみに上のソースコードは System.Managementに参照設定、Imports System.Net.NetworkInformationを追加する必要があります。 >「より高い確立」とは何を意味されてのことでしょうか? 聞いた話ではありますが、ネットワークの設定が不十分の場合、接続中のケーブルの刺し抜きとか、ネットワークアダプタがあっても必ず取得できるとは限らないそうです。(これはWindowsの仕様ですと言う方もいます) >NIC が複数存在する場合 ここらへんがよく分かりません、一つしかない環境でも物理的なものと、もう一つ「MSアダプタ!?」みたい論理的なものがあって、一つ目だけを取得しようとしたため、このようなソースコードになっております。 目的は、このパソコンはユニークの個体であるのを判別するためするためです。通信など高度なことに挑戦していませんが、確実にMACアドレスを取得したいです。 お願いいたします。