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

MACアドレス取得の方法

分類:[全般]

ここに来ると、VB.NETの情報が盛りだくさんでいつも助かってます。
最近仕事の都合でVB.NETを使用することになったのですが、
VB自体が始めてなもんで、日々勉強です。

さて、『MACアドレス』をどうしても取得したのですが、
コイツをどうやって取得したらいいものか・・・

どなたか教えてくださいますでしょうか。
よろしくお願いします。
  • 題名: Re[1]: MACアドレス取得の方法
  • 著者: ピラルク
  • 日時: 2003/08/14 20:45:16
  • ID: 327
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> さて、『MACアドレス』をどうしても取得したのですが、

iphlpapi.dllのSendARPを使えば取れるようですが(w2k-proで確認)、
このdllの出所が謎っぽいところが、いけてないです。

※他にスマートな方法があるかも。
※ローカルだけでいいなら、"ipconfig /all"
 をリダイレクトしてテキスト解析するというスマートでない手もある。

  Declare Auto Function SendARP Lib "iphlpapi.dll" ( _
                        ByVal DestIP As Integer, ByVal SrcIP As Integer, _
                        ByVal pMacAddr As Byte(), ByRef PhyAddrLen As Integer _
                        ) As Integer

  Private Sub Button1_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button1.Click
    Label1.Text = GetPhysicalAddress(IPAddress.Parse(TextBox1.Text))
    'ex. TextBox1.Text = "10.10.1.1"
  End Sub

  '--------+---------+---------+---------*---------+---------+---------+--
  'IPアドレスからMacアドレスを取得 "00-00-00-00-00-00"
  '--------+---------+---------+---------*---------+---------+---------+--
  Private Shared Function GetPhysicalAddress( _
                          ByVal targetIP As IPAddress) As String
    Const NO_ERROR% = 0
    Dim macAddr(5) As Byte
    Dim macSize As Integer = macAddr.Length

    Dim apiret As Integer = SendARP(targetIP.Address, 0, macAddr, macSize)
    If SendARP(targetIP.Address, 0, macAddr, macSize) <> NO_ERROR Then
      Return "Error or Unknown"
    End If

    Dim ret As String
    Dim b As Byte

    For Each b In macAddr
      ret += "-" & Hex(b).PadLeft(2, "0"c)
    Next
    Return ret.Substring(1)
  End Function
■No319に返信(るぱんちゃんさんの記事)
> さて、『MACアドレス』をどうしても取得したのですが、
> コイツをどうやって取得したらいいものか・・・

WMIを使っていると思うのですが、それでよろしければ次のページが参考になると思います。

・Planet Source - Get Mac Address
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=391&lngWId=10
>ピラルクさん&管理人さん
 ありがとうございます。
 お二人の即レスに大変感激しました。
 MACアドレスくらいチョチョイと取得できればいいのに…と思っておりましたが、
 案外、チョチョイと取得できそうです。早速実装してみます。
 
 "ipconfig /all"は考えましたが、やはりスマートではないのね(笑)
 今後も.NET開発者の発展目指して頑張ります!
 
 ピラルクさん本当にありがとうございました。
 管理人さん本当にありがとうございました。
  
解決済み!
フォローありがとうございます。>管理人様

WMIでいけますね。情報をまとめると

Dim objectQuery As New ObjectQuery( _
"Select MacAddress, IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
Dim searcher As New ManagementObjectSearcher(objectQuery)
Dim mo As ManagementObject

For Each mo In searcher.Get()
If Not IsDBNull(mo("IPAddress")) Then
Console.WriteLine("Mac Address = " & mo("MacAddress"))
Console.WriteLine("IP Address = " & Join(mo("IPAddress"), "."))
End If
Next

というのが妥当なとこかなぁ。(細部は私も分かってない(^^;)
(参)No329
(参)http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=7188

# WMIはやはり強力ですね。
# WMIのメタ情報にアクセスするにはどうすればいいのかなぁ
# ("select * from all_objects"というような感じで...)

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