アプリ版:「スタンプのみでお礼する」機能のリリースについて

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'1番目の方法
Dim Objquery As New Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress is not null")
Dim ObjCollection As Management.ManagementObjectCollection = Objquery.Get
Dim Obj As Management.ManagementObject

For Each Obj In ObjCollection
If (CType(Obj("IPEnabled"), Boolean) = True) Then
Label1.Text = Replace(Obj("MacAddress"), ":", "")
End If
Next

'2番目の方法
Dim computerProperties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()
Dim nics As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
Dim adapter As NetworkInterface

For Each adapter In nics
Label2.Text = adapter.GetPhysicalAddress().ToString()
Exit For
Next adapter

End Sub


いつもお世話になっております。
以上の2種類の方法のどちらかでMACアドレスを取得したいのですが、あいにく知識不足で、どちらの方がより高い確率で取得できるのでしょう。
ちなみにソースを見る限り、IPアドレスなどは複数持つことができるようです。かなりかなり不安です。

お願いいたします。

A 回答 (2件)

> どちらの方がより高い確率で取得できるのでしょう。



コードからして、おそらく .NET Framework 環境だとは思いますが
個人的には「二番目」のほうが無難かと思います。

読解力不足で申し訳ありませんが、この「より高い確立」とは何を
意味されてのことでしょうか?

このコードで気になるのは次のことです。
# 動作確認のためのコードでこうなっているだけかとは思いますが

※ 引用が前後してしまいますが
> For Each adapter In nics
> Label2.Text = adapter.GetPhysicalAddress().ToString()
> Exit For

NIC が複数存在する場合、最初に見付かった NIC が必ずしも所望の
インターフェースであるとは限らないので、限られた環境(NIC が
一つしかない)の場合以外で運用される場合は避けるべきではない
でしょうか?

この回答への補足

ご回答ありがとうございます。薄識のため、万が一適当なことを言ったらごめんなさい。VB2005です。ちなみに上のソースコードは
System.Managementに参照設定、Imports System.Net.NetworkInformationを追加する必要があります。

>「より高い確立」とは何を意味されてのことでしょうか?
聞いた話ではありますが、ネットワークの設定が不十分の場合、接続中のケーブルの刺し抜きとか、ネットワークアダプタがあっても必ず取得できるとは限らないそうです。(これはWindowsの仕様ですと言う方もいます)

>NIC が複数存在する場合
ここらへんがよく分かりません、一つしかない環境でも物理的なものと、もう一つ「MSアダプタ!?」みたい論理的なものがあって、一つ目だけを取得しようとしたため、このようなソースコードになっております。

目的は、このパソコンはユニークの個体であるのを判別するためするためです。通信など高度なことに挑戦していませんが、確実にMACアドレスを取得したいです。

お願いいたします。

補足日時:2008/03/16 20:41
    • good
    • 0

詳しいくないので、役に立たない情報かも知れませんが……



> ネットワークの設定が不十分の場合、

物理的に 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/

> 目的は、このパソコンはユニークの個体であるのを判別

※ これは余計なことなのでスルーして頂いてかまいません。
# ソフトウェアの使用制限にでもお使いになるのでしょうか?
# だとしたら、どれを使って登録するかをユーザに選ばせてその条件で
# 登録コードなどを発行するほうが無難ではないでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/30 18:26

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