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")Ifuserip=""Thenuserip=Request.ServerVariables("REMOTE_ADDR")......//方法一HttpContext.Current.Request.UserHostAddress;//方法二HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];//方法三stringstrHostName=System.Net.Dns.GetHostName();stringclientIPAddress=System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();//方法四(无视代理)HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];客户端://方法五varip='<!--#echovar="REMOTE_ADDR"-->';alert("YourIPaddressis"+ip);//方法六(无视代理)functionGetLocalIPAddress(){varobj=null;varrslt="";try{obj=newActiveXObject("rcbdyctl.Setting");rslt=obj.GetIPAddress;obj=null;}catch(e){//}returnrslt;}来自印度的MCTMaulikPatel提供了一种服务端的解决方案,很好:if(Context.Request.ServerVariables["HTTP_VIA"]!=null)//服务器,usingPRoxy{得到真实的客户端地址ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();//ReturnrealclientIP.}else//如果没有使用代理服务器或者得不到客户端的ipnotusingproxyorcan'tgettheClientIP{//得到服务端的地址ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString();//Whileitcan'tgettheClientIP,itwillreturnproxyIP.}
新闻热点
疑难解答