撒的阿坎努斯 发表于 2017-7-6 13:56:27

[Asp.Net]获取客户端ip和mac地址

摘要
  有时候,我们需要获取客户端的一些信息,以便进行统计。比如:客户端的唯一标识,ip等信息

IP
  通过获取HTTP_X_FORWARDED_FOR,或者REMOTE_ADDR可以获取客户端的ip。



      private string GetClientIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(result))
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.IsNullOrEmpty(result))
{
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}
  测试


MAC
  MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的标识符”(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。



      
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);

private static extern Int32 inet_addr(string ip);
private string GetClientMAC()
{
string mac_dest = string.Empty;
// 在此处放置用户代码以初始化页面
try
{
string userip = Request.UserHostAddress;
string strClientIP = Request.UserHostAddress.ToString().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");
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 (Exception ex)
{
throw ex;
}
return mac_dest;
}
  测试发现输出的mac地址和通过命令config/all查到的mac地址相同。
页: [1]
查看完整版本: [Asp.Net]获取客户端ip和mac地址