QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

C# NICのMACアドレスの取得方法

質問
Q1.自機に接続されているNICのMACアドレスを取得方法は??
Q2.Q1.のMACアドレスに対応するIPアドレスの取得方法は?

System.Net.Dnsクラスによって自記のホスト名経由でIPアドレスのリストが取得できますが、MACアドレスの取得方法が分かりません。System.Management名前空間あたりでしょうか?MACアドレスとIPアドレスの両方が取得できたなら、両者の対応も知りたいです。

質問者:ひろし

回答

ひろしさんの書き込み (2005-11-10 22:33) より:

MACアドレスの取得方法が分かりません。System.Management名前空間あたりでしょうか?

ビンゴですよ。

  ManagementScope クラス

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

こんばんは。

ひろしさんの書き込み (2005-11-10 22:33) より:

質問

Q1.自機に接続されているNICのMACアドレスを取得方法は??

Q2.Q1.のMACアドレスに対応するIPアドレスの取得方法は?

System.Net.Dnsクラスによって自記のホスト名経由でIPアドレスのリストが取得できますが、MACアドレスの取得方法が分かりません。System.Management名前空間あたりでしょうか?MACアドレスとIPアドレスの両方が取得できたなら、両者の対応も知りたいです。

ご質問の意図に沿っているのか分かりませんが…
IPアドレスからMACアドレスが欲しいのであれば、
P/Invokeを使って下記のようなコードで取得できると思います。



using System;
using System.Runtime.InteropServices;

namespace Sample
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            UInt32 ipAddr = inet_addr("192.168.25.31");

            byte[] macAddr = new byte[6];
            int lenPhyAddr = 6;

            int hr = SendARP(ipAddr, 0, macAddr, ref lenPhyAddr);
            if (hr != 0) 
            {
                Console.WriteLine("MACアドレスの取得に失敗しました。");
            }
            else 
            {
                Console.WriteLine("MACアドレス:{0,2:X}:{1,2:X}:{2,2:X}:{3,2:X}:{4,2:X}:{5,2:X}",
                    macAddr[0],macAddr[1],macAddr[2],macAddr[3],macAddr[4],macAddr[5]);
            }

        }

        [DllImport("ws2_32.dll", ExactSpelling=true)]
        static extern UInt32 inet_addr(string cp);


        [DllImport("iphlpapi.dll", ExactSpelling=true)]
        public static extern int SendARP(UInt32 DestIP, UInt32 SrcIP, [Out] byte[] pMacAddr, ref int PhyAddrLen);
    }
}

どうでしょうか?

投稿者:Tdnr_Sym

編集 履歴 (0)

回答ありがとうございます。
Tdnr_Symさんのソースコードで目的を果たすことができました。
ところで、自機のNICであれば、じゃんぬねっとさんご指摘の
ManagementScopeクラスから抽出できそうな気がしていますが、
使い方がいまいちよく分かりません。
ManagementScopeクラスによる検索方法も
教えてくださればありがたいです。

投稿者:ひろし

編集 履歴 (0)

こんばんは。

ひろしさんの書き込み (2005-11-11 20:00) より:

ところで、自機のNICであれば、じゃんぬねっとさんご指摘の

ManagementScopeクラスから抽出できそうな気がしていますが、

使い方がいまいちよく分かりません。

ManagementScopeクラスによる検索方法も

教えてくださればありがたいです。

こんなのは参考になりますでしょうか?
http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=7188

ちゃんとPCにささっているNICのMACアドレスを取得できるみたいです。
試していないですが、多分2枚以上ささっていても取得できるんじゃないでしょうか。

投稿者:Tdnr_Sym

編集 履歴 (0)

ご回答ありがとうございます。
それぞれの方法でうまくいきました。

投稿者:ひろし

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。