- PR -

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

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-11-10 22:33
質問
Q1.自機に接続されているNICのMACアドレスを取得方法は??
Q2.Q1.のMACアドレスに対応するIPアドレスの取得方法は?

System.Net.Dnsクラスによって自記のホスト名経由でIPアドレスのリストが取得できますが、MACアドレスの取得方法が分かりません。System.Management名前空間あたりでしょうか?MACアドレスとIPアドレスの両方が取得できたなら、両者の対応も知りたいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-10 23:33
引用:

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

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


ビンゴですよ。

  ManagementScope クラス

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-11 00:12
こんばんは。

引用:

ひろしさんの書き込み (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);
	}
}



どうでしょうか?
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-11-11 20:00
回答ありがとうございます。
Tdnr_Symさんのソースコードで目的を果たすことができました。
ところで、自機のNICであれば、じゃんぬねっとさんご指摘の
ManagementScopeクラスから抽出できそうな気がしていますが、
使い方がいまいちよく分かりません。
ManagementScopeクラスによる検索方法も
教えてくださればありがたいです。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-11 20:39
こんばんは。

引用:

ひろしさんの書き込み (2005-11-11 20:00) より:
ところで、自機のNICであれば、じゃんぬねっとさんご指摘の
ManagementScopeクラスから抽出できそうな気がしていますが、
使い方がいまいちよく分かりません。
ManagementScopeクラスによる検索方法も
教えてくださればありがたいです。



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

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

ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-11-18 09:31
ご回答ありがとうございます。
それぞれの方法でうまくいきました。
1

スキルアップ/キャリアアップ(JOB@IT)