首先介绍一下Mac地址:
介质访问控制(Media Access Control ,简称MAC)地址,是厂商生产的网卡的地址,对于每一台设备是惟一的,该地址定义了计算机间的网络连接,记录在网络接口卡(Network Interface Card ,NIC)上的硬件电路上。介质访问控制地址是由12位16进制数(O~F)共48位表示,前24位标识网络接口卡的厂商,不同厂商生产的标识不同,后24位是由厂商指定的网络接口卡序列号。
我们可以用MAC的唯一性在程序里做一些功能,具体的功能这里就详细说了,下面就是具体的实现。
using System;
using System.Runtime.InteropServices;

namespace Underlet.Components


{
public class GetClientMac

{
[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);

public GetClientMac()

{
}


/**//// <summary>
/// 获取客户端的MAC地址
/// </summary>
/// <param name="IP">客户端IP</param>
/// <returns>客户端的MAC地址</returns>
public string GetMac(string IP)

{
string mac_dest="";
try

{
string strClientIP = IP;
Int32 ldest = inet_addr(strClientIP); //目的地的ip
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
string mac_src=macinfo.ToString("X");
if(mac_src == "0")

{
return "正在访问Localhost!";
}

while(mac_src.Length<12)

{
mac_src = mac_src.Insert(0,"0");
}

for(int i=0;i<11;i++)

{
if (0 == (i % 2))

{
if ( i == 10 )

{
mac_dest = mac_dest.Insert(0,mac_src.Substring(i,2));
}
else

{
mac_dest ="-" + mac_dest.Insert(0,mac_src.Substring(i,2));
}
}
}
}
catch

{
}
return mac_dest;
}
}
}

这样调用就可以了
GetClientMac mac = new GetClientMac();
Response.Write( mac.GetMac(Request.UserHostAddress.ToString().Trim()));