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

asp.net获取IP与MAC

2016-03-11 20:08 447 查看
用于获取客户端的IP与MAC,MAC内网可以用,外网无用!

using System.Runtime.InteropServices;

[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)
{
//获取IP
this.ip_textbox.Text = GetClientIP();
//获取MAC
this.MAC_textbox.Text = GetClientMAC();
}

///<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;
}


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