今天看公司其它同事人写的代码,发现两个比较有用的方法,果断作个记号.
#region 获取本机第一块网卡的 MAC 地址
/// <summary>
/// 获取本机第一块网卡的 MAC 地址
/// </summary>
/// <returns></returns>
public static string GetMac()
{
System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
string strMac = mo["MacAddress"].ToString();
mo.Dispose();
moc.Dispose();
mc.Dispose();
return strMac;
}
}
return "";
}
[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);
/// <summary>
/// 获取客户端MAC
/// </summary>
/// <returns></returns>
public static string GetClientMac()
{
string mac_dest = "";
// 在此处放置用户代码以初始化页面
try
{
string strClientIP = System.Web.HttpContext.Current.Request.UserHostAddress.Trim();
Int32 ldest = inet_addr(strClientIP); //目的地的ip
Int32 lhost = inet_addr(""); //本地服务器的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 "0";
}
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 "0";
}
return mac_dest;
}
#endregion
#region GetIP
/// <summary>
/// 获取用户IP
/// </summary>
/// <returns></returns>
public string GetIP()
{
string sIp = String.Empty;
sIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (IsEmpty(sIp)) sIp = HttpContext.Current.Request.UserHostAddress;
return sIp;
}
#endregion