using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Runtime.InteropServices;
public partial class test_ShowIPAndMac : System.Web.UI.Page
{
[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);
protected void Page_Load(object sender, EventArgs e)
{
string ip = GetClientIP();
string mac=GetClientMAC();
Response.Write(string.Format("IP:{0},Mac:{1}", ip, mac));
}
///<summary>
///得到客户端ip
///</summary>
///<returns>ip</returns>
private string GetClientIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}
///<summary>
/// 利用客户端ip得到客户端mac
///</summary>
///<param name="remoteip">客户端ip</param>
///<returns>int16类型的mac</returns>
static private Int64 getremotemac(string remoteip)
{
Int32 ldest = inet_addr(remoteip);
try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest, 0, ref macinfo, ref len);
return macinfo;
}
catch (Exception err)
{
Console.WriteLine("error:{0}", err.Message);
}
return 0;
}
///<summary>
/// int64类型的mac转换成正确的客户端mac
///</summary>
///<returns>mac</returns>
private string GetClientMAC()
{
Int64 macid = getremotemac(GetClientIP());
if (macid == 0)
return "0";
string beforeMacAddr = Convert.ToString(macid, 16);
string endMacAddr = "";
string[] macArray = new string[6];
for (int i = 0; i < 6; i++)
{
macArray[i] = beforeMacAddr.Substring(i * 2, 2);
} for (int i = 0; i < 6; i++)
{
endMacAddr += macArray[5 - i] + "-";
}
endMacAddr = endMacAddr.Substring(0, endMacAddr.Length - 1);
endMacAddr = endMacAddr.ToUpper();
return endMacAddr;
}
}