`
jiangwenfeng762
  • 浏览: 286133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于代理类型以及如何在各种代理情况下获得客户端IP

阅读更多

http 代理有几种类型?

 

透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了,例如Garden 2程序。
 
匿名代理。使用此种代理时,虽然被访问的网站不能知道你的IP地址,但仍然可以知道你在使用代理,有些侦测IP的网页也仍然可以查到你的IP。 

高度匿名代理:使用此种代理时,被访问的网站不知道你的IP地址,也不知道你在使用代理进行访问。此种代理的隐藏IP地址的功能最强。
如何获得用户IP?
http://hi.baidu.com/zs5460/item/4f6db3d0f76534bf33db9030

Request.ServerVariables变量意义.

 http代理相关知识 Request.ServerVariables["HTTP_VIA"]---------可以获得用户内部的ip Request.ServerVariables["HTTP_X_FORWARDED_FOR"]---------可以知道代理服务器的服务器名以及端口 Request.ServerVariables["REMOTE_ADDR"]-- 发出请求的远程主机的 IP 地址。

 http代理相关知识 关键就在HTTP_X_FORWARDED_FOR 使用不同种类代理服务器,上面的信息会有所不同:

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

REMOTE_ADDR = 您的 

IP HTTP_VIA = 没数值或不显示 

HTTP_X_FORWARDED_FOR = 没数值或不显示 

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

REMOTE_ADDR = 代理服务器 IP 

HTTP_VIA = 代理服务器 IP 

HTTP_X_FORWARDED_FOR = 您的真实 IP 

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

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

REMOTE_ADDR = 代理服务器 IP 

HTTP_VIA = 代理服务器 IP 

HTTP_X_FORWARDED_FOR = 代理服务器 IP 

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

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

REMOTE_ADDR = 代理服务器 IP 

HTTP_VIA = 代理服务器 IP 

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

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies) 

REMOTE_ADDR = 代理服务器 IP 

HTTP_VIA = 没数值或不显示 

HTTP_X_FORWARDED_FOR = 没数值或不显示 

在WEB开发中.我们可能都习惯使用下面的代码来获取客户端的IP地址:  -----------------C#代码----------------------------------------------------------------------

//优先取得代理IP 
string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (string.IsNullOrEmpty(IP)) {
 //没有代理IP则直接取连接客户端IP 
 IP = Request.ServerVariables["REMOTE_ADDR"]; 

-----------------------------------------------------------------------------------------------  上面代码看来起是正常的.可惜这里却隐藏了一个隐患!!因为"HTTP_X_FORWARDED_FOR"这个值是通过获取HTTP头的"X_FORWARDED_FOR"属性取得.所以这里就提供给恶意破坏者一个办法:可以伪造IP地址!!  下面是测试代码:  --------------C#代码---------------------------------------------------------------------------

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/ip.aspx"); 
request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0"); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader stream = new StreamReader(response.GetResponseStream()); 
string IP = stream.ReadToEnd(); 
stream.Close(); 
response.Close(); 
request = null; 

-----------------------------------------------------------------------------------------------  "ip.aspx"文件代码:  ------------C#代码-----------------------------------------------------------------------------

Response.Clear(); 
//优先取得代理IP 
string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (string.IsNullOrEmpty(IP))

  //没有代理IP则直接取客户端IP 
  IP = Request.ServerVariables["REMOTE_ADDR"]; 

Response.Write(IP); 
Response.End(); 

------------------------------------------------------------------------------------------------  这样.当测试代码中去访问ip.aspx文件时."string IP = stream.ReadToEnd();"这段代码取到的IP数据就是"0.0.0.0"!!!!(呵.在真实情况下.这样的IP地址肯定不是我们想要的结果.而在有些投票系统中限制一个IP只能投1次票时,如果也是用类似的代码取得对方IP然后再判断的话.呵呵.限制就失效咯)...  或者如果你用上面代码获取IP地址后后面又不再进行数据判断的话也许还能更进一步进行数据破坏!! 比如你用类似上面的代码中获取IP地址就直接有这样的SQL语句:  string sql = "INSERT INTO (IP) VALUE ('" + IP + "')";  那么也许破坏者还可以进行SQL注入进行数据破坏!!  这样看来利用"HTTP_X_FORWARDED_FOR"这个属性获取客户端IP的方法就不再可取了.-_-# 但如果不用这种方法.那么那些真正使用了代理服务器的人.我们又不能再获取到他们的真实IP地址(因为某些代理服务器会在"X_FORWARDED_FOR"这个HTTP头里加上访问用户真正的IP地址).呵.现实就是这样,某种东西都有有得必有失... 

分享到:
评论

相关推荐

    代理IP服务端—客户端.rar

    代理IP服务端—客户端.rar

    代理IP客户端

    代理IP客户端用法及用途不用说,

    获取客户端真实IP(支持代理服务器)

    获取客户端真实IP(支持代理服务器)

    jsp页面得到客户端的真是ip

    介绍了jsp页面是如何获取客户端的真是ip的,考虑到了方向代理技术

    Java获取客户端IP及Mac地址(同网段).rar

    在Controller类获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用...

    获取客户端IP

    在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等...

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

    java非常强的获取客户端真实IP的两种方法

    Java获取客户端真实的IP的两种实现方法,即使通过多级代理也能获取到,很有用

    Ubuntu下神州数码代理客户端

    在Linux下启动后,网卡IP为空; 如果符合以上两点,则必须使用--dhcp模式启动zdclient,而且在认证成功后,是需要运行系统的DHCP客户端重新获取一次IP的,通常是dhclient,这一点在启动脚本dhcp_zdc_run.sh内已经...

    获取客户端ip

    获取客户端ip,可以在服务端使用代理 的情况下获取

    Java获取客户端IP

     原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。  现在图示代理上网和IP的关系:  第一种情况:不通过代理上网,...

    php获取客户端真实ip

    php函数获取电脑客户端真实ip,包括代理

    Java正确获取客户端真实IP方法整理.docx

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将...

    c#获取客户端IP地址(考虑代理)

    主要介绍了c#获取客户端IP地址(考虑代理),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    nginx配置文件-安装客户端ip进行转发

    nginx配置文件-安装客户端ip进行转发 具体可查看zip包中的nginx.conf及default.vhosts.conf

    java获得客户端真实的ip地址

    我们知道在jsp里,获取网页客户端的ip地址的方法是:request.getremoteaddr(),这种方法在大部分情况下都是有效的。但是在通过了apache,squid等反向代理软件就不能获取到客户端的真实ip地址了。如果使用了反向代理...

    ASP如何获取真实IP地址

    大家都知道,在ASP中可以使用Request.ServerVariables("REMOTE_ADDR")来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。要想透过代理服务器...

    PHP获取客户端真实IP地址的5种情况分析和实现代码

    在PHP获取客户端IP中常使用 $_SERVER[“REMOTE_ADDR”] 。 (1) 但如果客户端是使用代理服务器来访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,...

    易语言伪造请求ip 伪造请求ip 网页访问伪造ip

    结合HTTP扩展请求头 X-Forwarded-For 可以对客户端IP进行伪造 X-Forwarded-For 是一个 HTTP 扩展头部,用来表示HTTP请求端真实 IP,HTTP/1.1 协议并没有对它的定义,但现如今X-Forwarded-For已被各大 HTTP 代理、...

Global site tag (gtag.js) - Google Analytics