asp.net获取客户端IP方法(转载)

最近web获取客户端ip,看到下面这篇文章,转载过来,一起分享(转载地址:http://www.cnblogs.com/yejun/archive/2008/02/26/1082485.html)

通常我们都通过下面的代码获得IP:

string ip =System.Web.HttpContext.Current.Request.UserHostAddress;
    或
string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

REMOTE_ADDR 说明:

访问客户端的 IP 地址。 
此项信息用户不可以修改。
如果真的给改了的话,你也和服务器连接不了了,服务器就是按照这个来与客户端建立连接并进行通讯的。实际我测试修改这个 ServerVariables , 一点效果都没有。仍然获得是实际的值。

但如果用户使用了代理服务器,上述代码获得的是代理服务器的IP地址;如果用户使用了多个代理服务器,则是到达服务器的最后一个代理服务器的IP地址。

如何绕过代理服务器获得用户真实的IP地址呢?

private static string getIp()
 {
     if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
      return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ‘,‘ })[0];
    else
      return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
 }

Request.ServerVariables["HTTP_VIA"] ,ServerVariables["HTTP_X_FORWARDED_FOR"],Request.ServerVariables["REMOTE_ADDR"]的值分下面几种情况:

一、没有使用代理服务器的情况:

REMOTE_ADDR = 用户的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP 
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 用户的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP 
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP 
      HTTP_VIA = 代理服务器 IP 
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

所以getIp()也不是最好的,因为可以编造一个假的IP,具体做法去看http://www.cnblogs.com/kingthy/archive/2007/11/24/970783.html

总结:
"Request.UserHostAddress"是可信的.但是这样的话却又获取不了那些已使用了代理服务器的用户真实IP地址(因为在这时Request.UserHostAddress获取到的就是这代理服务器的IP);
getIp()又有安全隐患;
具体怎么做就要看自己选择了。

时间: 2024-11-07 19:52:40

asp.net获取客户端IP方法(转载)的相关文章

ASP.NET 获取 客户端IP 方法

string requestClientIpAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(requestClientIpAddress)) requestClientIpAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

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(电脑名

ASP.NET获取客户端IP地址

public static string GetRealIP()        {            string ip;            try            {                HttpRequest request = HttpContext.Current.Request; if (request.ServerVariables["HTTP_VIA"] != null)                {                    ip

ASP.NET获取客户端信息,获取客户端IP等等

山上明月 ASP.NET能知道的东西 获取服务器电脑名: Page.Server.ManchineName 获取用户信息: Page.User 获取客户端电脑名:Page.Request.UserHostName 获取客户端电脑IP: Page.Request.UserHostAddress 1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostName

c# 获取客户端IP地址方法

客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariables.Get("Remote_Host").ToString(); 客户端浏览器IE: Request.Browser.Browser; 客户端浏览器 版本号: Request.Browser.MajorVersion;// 客户端操作系统: Request.Browser.Platfo

获取客户端IP地址 via C#

获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同时也想抛砖引玉.参考的博文及其作者在下文均有提及.待到自己以后对HTTP.TCP/IP等知识学深入了,一定再来这里深入讨论这个内容. 一.名词 首先说一下接下来要讲到的一些名词. 在Web开发中,我们大多都习惯使用HTTP请求头中的某些属性来获取客户端的IP地址,常见的属性是REMOTE_ADDR.

再论 ASP.NET 中获取客户端IP地址

说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分区域投放等. 1: HttpContext.Current.Request.ServerVariables["HTTP_VIA"]; 2: HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"

JS获取客户端IP地址、MAC和主机名的7个方法汇总

一.使用JS获取客户端IP的几个方法 方法一(只针对IE且客户端的IE允许AcitiveX运行,通过平台:XP,SERVER03,2000). 获取客户端IP代码: 1 function GetLocalIPAddr() { 2 var oSetting = null; 3 var ip = null; 4 try { 5 oSetting = new ActiveXObject("rcbdyctl.Setting"); 6 ip = oSetting.GetIPAddress; 7

JS获取客户端IP地址、MAC和主机名七种方法

一.使用JS获取客户端IP的几个方法方法一(只针对IE且客户端的IE允许AcitiveX运行,通过平台:XP,SERVER03,2000).获取客户端IP代码:<HTML><HEAD><TITLE>GetLocalIP</TITLE></HEAD><BODY>获取IP:<script language="JavaScript"> function GetLocalIPAddr(){ var oSetti