ASPNET獲取IP地址 MAC地址

flyingstarwb發表於2008-06-23

ASP.NET獲取客戶端IP/使用者名稱等資訊

 1. 在ASP.NET中專用屬性:
獲取伺服器電腦名:Page.Server.ManchineName
獲取使用者資訊:Page.User
獲取客戶端電腦名:Page.Request.UserHostName
獲取客戶端電腦IP:Page.Request.UserHostAddress

2. 在網路程式設計中的通用方法:
獲取當前電腦名:static System.Net.Dns.GetHostName()
根據電腦名取出全部IP地址:static System.Net.Dns.Resolve(電腦名).AddressList
也可根據IP地址取出電腦名:static System.Net.Dns.Resolve(IP地址).HostName

3. 系統環境類的通用屬性:
當前電腦名:static System.Environment.MachineName
當前電腦所屬網域:static System.Environment.UserDomainName
當前電腦使用者:static System.Environment.UserName

獲取客戶端IP:

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

獲取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);

  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此處放置使用者程式碼以初始化頁面
   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");
    if(mac_src == "0")
    {
     if(userip=="127.0.0.1")
      Response.Write ("正在訪問Localhost!");
     else
      Response.Write ("歡迎來自IP為" + userip + "的朋友!" + "
");
     return;
    }

    while(mac_src.Length<12)
    {
     mac_src = mac_src.Insert(0,"0");
    }

    string mac_dest="";

    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));
      }
     }
    }
    Response.Write ("歡迎來自IP為"+userip+ "
" + ",MAC地址為"+mac_dest+"的朋友!"

     +   "
");
   }
   catch(Exception err)
   {
    Response.Write(err.Message);
   }
  }
 

IP=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If IP = "" Then IP=Request.ServerVariables("REMOTE_ADDR")
info=request.servervariables("http_user_agent")
response.cookies("buyok_user_ip")=ip
請教各位高手以上ASP程式碼是什麼意思啊?

如果客戶端使用了代理伺服器,使用Request.ServerVariables("HTTP_X_FORWARDED_FOR") 得到IP地址,如果沒用使用代理伺服器,得到的是"",則用Request.ServerVariables("REMOTE_ADDR") 得到IP地址.
request.servervariables("http_user_agent") 得到使用者HTTP裝置的變數,如:你使用的IE瀏覽器版本,還有你的機器名和作業系統......
response.cookies("buyok_user_ip")=ip 是將得到的IP用Cookies物件寫入客戶端(變數名取為"buyok_user_ip")

《HTTP_X_FORWARDED_FOR & REMOTE_ADDR》

在 ASP 中使用 Request.ServerVariables("REMOTE_ADDR") 來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取。

不過要注意的事,並不是每個代理伺服器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的 IP。

還有一點需要注意的是:如果客戶端沒有透過代理伺服器來訪問,那麼用Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值將是空的。因此,如果要在程式中使用此方法,可以這樣處理:

......

userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")

......

即:如果客戶端透過代理伺服器,則取 HTTP_X_FORWARDED_FOR 的值,如果沒透過代理伺服器,就取 REMOTE_ADDR 的值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13923422/viewspace-364575/,如需轉載,請註明出處,否則將追究法律責任。

相關文章