您的位置:首页 > 编程语言 > C#

C#获得本机MAC地址 - [Coding](转)

2009-07-01 10:51 288 查看
版权声明
:转载时请以超链接形式标明文章原始出处和作者信息及本声明

http://jessiexxb.blogbus.com/logs/7472771.html

刚开始在机房推广我们组的系统,用户注册就失效了,debug了许久之后,发现居然是一直都在使用的获得MAC的地址的方法居然失效了——数据库报异常,以MAC为主键的表提示主键重复了






,怎么可能啊?就好像GUID重复一样!!!!

对原来获得MAC的地址的代码做了测试,才发现在我机子居然运行的结果和在cmd下ipconfig的结果不同


,仅是一个vm的mac。源码如下:

string MacAddress;

//设置MAC地址

string MAC="";

ManagementClass MC = new ManagementClass ( "Win32_NetworkAdapterConfiguration" );

ManagementObjectCollection MOC = MC.GetInstances();

foreach ( ManagementObject moc in MOC )

{

if ( moc["IPEnabled"].ToString() == "True")

{

MAC = moc["MacAddress"].ToString();

}

}

MacAddress=MAC;

经过在网络上寻找,找到了获得本机mac的方法,只是结果是一个ArrayList,运行的结果和cmd下命令一样,只是包括了一个真的mac和两个vm的mac,源码如下:

using System.Management;

using System.Runtime.InteropServices;

using System.Text;

using System.Text.RegularExpressions;

string
strsearch=string.Format(@"SELECT MACAddress FROM Win32_NetworkAdapter
WHERE ((MACAddress Is Not NULL)AND (Manufacturer <>
'Microsoft'))");

System.Management.ManagementObjectSearcher msearch=new ManagementObjectSearcher();

msearch.Scope=new ManagementScope(@"root/CIMV2");

msearch.Query=new ObjectQuery(strsearch);

ArrayList MacList =new ArrayList();

int i =0;

try

{

if((msearch.Get().Count<1) || (msearch.Get()==null))

{

MessageBox.Show("No MAC Address!");

}

else

{

MessageBox.Show("MAC Address No. is : "+ msearch.Get().Count.ToString());

foreach(System.Management.ManagementObject mymac in msearch.Get())

{

string str1=string.Format("MAC{0} address:{1}",i.ToString(),mymac["MACAddress"].ToString());

MessageBox.Show("MAC Address "+i.ToString()+":"+str1);

MacList.Add(str1);

i++;

}

}

}

catch(Exception ex)

{

string msg=ex.Message.ToString();

MessageBox.Show("erro", msg);

}

由于没有办法确定获得mac那个真实的,所以又用了第三个方法,通过IP地址获得mac:

using System.Management;

using System.Runtime.InteropServices;

using System.Text;

using System.Text.RegularExpressions;

[DllImport("Iphlpapi.dll")]

private static extern int SendARP(Int32 dest,Int32 host,ref Int32 mac,ref Int32 length);

[DllImport("Ws2_32.dll")]

private static extern Int32 inet_addr(string ip);

string IPAddress=System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString();

MessageBox.Show("ip: "+IPAddress);

string mac = this.GetMACFromIP(IPAddress);

MessageBox.Show("mac: "+mac);

private string GetMACFromIP(string A_strIP)

{

string strRet = "Unknown";



string strIPPattern = @"^/d+/./d+/./d+/./d+$";



Regex objRex =new Regex(strIPPattern);



if(objRex.IsMatch(A_strIP) == true)

{

Int32 intDest = inet_addr(A_strIP);

Int32 [] arrMAC = new Int32[2];

Int32 intLen = 6;



int intResult = SendARP(intDest,0,ref arrMAC[0],ref intLen);



if(intResult == 0)

{

Byte [] arrbyte = new Byte[8];

arrbyte[5] = (Byte)(arrMAC[1] >> 8);

arrbyte[4] = (Byte)arrMAC[1];

arrbyte[3] = (Byte)(arrMAC[0] >> 24);

arrbyte[2] = (Byte)(arrMAC[0] >> 16);

arrbyte[1] = (Byte)(arrMAC[0] >> 8);

arrbyte[0] = (Byte)arrMAC[0];



StringBuilder strbMAC = new StringBuilder();



for(int intIndex = 0 ;intIndex < 6;intIndex ++)

{

if(intIndex > 0) strbMAC.Append("-");

strbMAC.Append(arrbyte[intIndex].ToString("X2"));

}

strRet = strbMAC.ToString();

}

}



return strRet;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: