介质访问控制(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;
}
}
}
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()));