今天Boss說,項目中的報錯郵件發回的客戶端IP地址不對,居然是自己服務器端的IP地址...我那個汗了一把...百度了一堆,最會也木有找到更好的方法,希望園子里的大牛們給小弟指點指點...
下面是正在使用的獲取IP地址的方法. 正如你看到的,有時候仍舊取不到真的准確的IP地址,我想要個能百分之百取得IP地址的方法,只能跪求了....
/// <summary> /// 獲取ip /// </summary> /// <param name="m_p">當前頁</param> /// <returns>IP</returns> public static string GetUserIP() { HttpContext context = HttpContext.Current; string clientip = ""; //可以透過代理服務器取得客戶端真實的IP,但是並不是每個代理服務器都能用這個方法取得真實IP //如果客戶端沒有使用代理服務器,這個值就為null,所以必須判斷 if (context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) { clientip = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Trim(); if (clientip.IndexOf(",") > -1) { string[] tempIp = clientip.Split(','); foreach (string s in tempIp) { //192.168.1.1屬於IP地址的C類地址,屬於保留IP,專門用於路由器設置. if (!s.StartsWith("192.168")) { clientip = s.Trim(); break; } } } } else { //取得客戶端的IP地址,如果客戶端使用代理服務器,那么取得的就是代理服務器的IP,而不是真實的IP地址 clientip = context.Request.ServerVariables["REMOTE_ADDR"]; } try { IPAddress.Parse(clientip); } catch { clientip = "127.127.0.1"; } return clientip; }