DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MACアドレス(接続が2つ以上の場合)

環境/言語:[VB.NET 2002]
分類:[.NET]

どこかのHPに載っていたものをそのままコピーし、
少しだけいじったプログラムなのですが、

Dim MacAddr As String
Dim IPAddr As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 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
   MacAddr = Obj("MacAddress")
   Dim IPAs As String()
   IPAs = Obj("IPAddress")
   Dim IPA As String
   For Each IPA In IPAs
    Debug.WriteLine("IPAddr:" & IPA)
    IPAddr = IPA
    Exit For
   Next
  End If
 Next
 MsgBox(MacAddr & vbCrLf & IPAddr)
 End
End Sub

このようにすると自分のIPアドレスとMACアドレスを取得し、表示します。
どうして取得できるのかはなんとなくしか分かっていませんw
(多分、分かっていれば今回の問題は自己解決できると思うのですが・・・)

コマンドプロンプトでipconfig/allを実行したとき、
接続が一つだけなら良いのですが、ネットワークの構成によって
「Ethernet adapter ローカル エリア接続」の他に、
「PPP adapter ***」が表示される場合もありますよね。
先の方法でMACアドレスを取得すると後者の方が取得されてしまうのですが、
前者、または両方を取得するにはどうしたら良いのでしょうか。

自分の調べ方が悪いだけかもしれませんが、
この辺の情報は検索してもなかなか見つからず困っています。
よろしくお願いします。
> 接続が一つだけなら良いのですが、ネットワークの構成によって
> 「Ethernet adapter ローカル エリア接続」の他に、
> 「PPP adapter ***」が表示される場合もありますよね。
> 先の方法でMACアドレスを取得すると後者の方が取得されてしまうのですが、
> 前者、または両方を取得するにはどうしたら良いのでしょうか。

  PPP adapter *** の方は、当然、ダイアルアップして接続が為されない
  ことには、MACアドレスが決定されませんので、その場合は、
  WHERE MACAddress is not null
  と言う文法に従って、SELECTデータに上がってこないのです。

  PPP してから上記プログラムを実行すれば、MACアドレスが存在すること
  になりますので、プログラム通り動作し、アドレス列挙に上がってきます。

  お試し下さい。

以上。
先のやり方でMACアドレスを検出するプログラムを配布しているのですが、
その利用者から検出されないとの苦情が来ており、
詳細を聞いたところ、ADSLで、PCにはLANが一つしかささっていないのに
ipconfig/allをやると
「Ethernet adapter ローカル エリア接続」の他に、
「PPP adapter ***」も表示されるそうです。
スクリーンショット画像を送ってもらったところ、
前者の情報にはローカルIPや正しいMACアドレス、
後者の情報にはグローバルIPや正しくないMACアドレスが表示されていました。

その人のPCが故障でもしているのではないかとも思ったのですが、
複数の人から同じ苦情が来ており、
その人たちの正しくないMACアドレスの後半は必ず「00-00-00」になっています。

おそらくネットワークの構成に問題があるのだと思うのですが、
せっかく正しいMACアドレスもコマンドプロンプト上では出ているので、
そのような状態でもMACアドレスを取得できるようにしたいのです。
■No9876に返信(smithさんの記事)
> 前者の情報にはローカルIPや正しいMACアドレス、
> 後者の情報にはグローバルIPや正しくないMACアドレスが表示されていました。

  正しくないMACアドレスって何でしょうか?
  PPPの仕組みをご存知ないようですが、PPPセッションが張られて
  ラディウスサーバーからPPPアダプタが仮のMACアドレスを貰って
  尚且つIPアドレスも貰って動作する仕様ですから、実質正しくないと
  言う表現はおかしいのですが。

  尚、ipconfigで表示されるMACアドレスと、今回お作りになったソフ
  トで、取得・表示されるMACアドレスが違うなら、取得方法に誤りが
  あるのかどうか・・・

  現時点では、作られたソフトがどうなっているのか解りませんので、コ
  メントできません・・・

以上。
>   正しくないMACアドレスって何でしょうか?

ほとんどの利用者は問題なく個別のMACアドレスが検出されているので、
私は勝手に「正しくないMACアドレス」というような表現をしていますが、
その正しくないMACアドレスは具体的には「00-53-45-00-00-00」で、
苦情を言ってきている利用者はみんなこれが検出されています。

>   現時点では、作られたソフトがどうなっているのか解りませんので、コ
>   メントできません・・・

最初に9837番記事で書いたプログラムをメールでその利用者にメール添付し、
実行してもらいましたが、みんな「00-53-45-00-00-00」と表示されます。
なので、どうなっているかといえば、このプログラムのとおりです。

一応利用者の一人のPCがFUJITSU製だったので、
私がFUJITSUに問い合わせてみたのですが、
一般的にはそのようにMACアドレスが重なったり、
後半が「00-00-00」になることは考えにくいので、
故障だと疑ったほうがよいというような微妙な回答でした。

作っているソフトは全員個別の情報が検出される必要があるので、
誰かと誰かのMACアドレスが同じになってしまっていて困っています。
説明が分かりにくくてすみません。
■No9901に返信(smithさんの記事)
> 最初に9837番記事で書いたプログラムをメールでその利用者にメール添付し、
> 実行してもらいましたが、みんな「00-53-45-00-00-00」と表示されます。
> なので、どうなっているかといえば、このプログラムのとおりです。

  そのMACアドレスの検出された方の、ご利用になっているプロパイダ
  なり、ダイアルアップの設定なり、また、OSや回線種別がわからない
  と、結果、どうにもなりませんネ〜

  考えられるものには仮想LANアダプタと呼ばれるものをインストール
  しておられる場合、もしかしてそのようなことが発生するかもしれませ
  ん。仮想LANアダプタは、SoftEtherとかにも使われていますので。

  ユーザーの環境に依存しますので、確かに苦情と言う形になっています
  が、配布されたソフトが原因とは言い難いかと。ただ、そのような特定
  方法を採用したがために発生したと言うことになりますので、MACア
  ドレスを取得される際は、物理的なハードウェアからの取得、言い換え
  れば存在する物理アドレスを持っているLANカードからMACアドレ
  スを取得する・・・無ければ、他の何かを代用する・・・と言う風にし
  ないといけないのでは?

  ご検討下さい。

以上。
物理アドレスを持っているLANカードからMACアドレスを取得するのが理想なのですが、
MACアドレス+VB関係の情報はなかなか見つけることができず、
やっと見つけたのがこの方法だけだったので、使用しています。
もしその方法をご存知でしたら教えていただけないでしょうか。
自分でも今もいろいろ検索中ですが、もともと検索自体下手なもので・・・
すみません。自分がバカでした・・・
最初の記事で書いたプログラムをよ〜く見直してみたら、
2つ以上接続があっても、すべてMACアドレスを取得できていても、
ループ中にどんどん上書きされて、
結局最後の接続のMACアドレスしか表示されないことに気づきました。

MsgBox(MacAddr & vbCrLf & IPAddr)
の部分を2行上(End Ifの前)に移動させたプログラムを、
苦情を言っている人の一人に実行してみてもらったところ、
やはり予想通り、2回メッセージボックスが表示され、
1回目にLANカードのMACアドレスが表示されました。

ご意見をくださりありがとうございました。
また何かあったときはよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板