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服务端与客户端是网络通信中常见的技术应用,尤其在数据抓取、网络测试、匿名浏览等场景中扮演着重要角色。在这个“代理IP服务端—客户端.rar”压缩包中,包含了服务端和客户端两个关键组成部分,它们共同构建...
在这种情况下,原始的客户端IP地址信息被记录在HTTP请求头中的`X-Forwarded-For`字段里。 #### 三、解决方案 为了准确获取客户端的真实IP地址,我们可以采用以下几种方法: ##### 方法一:基本实现 首先,检查...
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...
代理IP客户端用法及用途不用说,
3. **多种情况处理**:为了确保在各种情况下都能正确获取到客户端的真实 IP 地址,需要编写逻辑更加复杂的代码进行判断。 通过上述方法,我们可以有效地解决在 JSP 页面中获取客户端真实 IP 地址的问题,这对于开发...
当请求经过反向代理时,这个字段会包含原始客户端IP地址的信息。以下是一个简单的示例代码: ```java public String getRealIP(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for");...
在ASP.NET Core中,`GetClientIpAddress()`方法可以更方便地获取客户端IP,它会处理代理服务器的情况。 结合提供的资源,"ASPdotnet获得客户端的IP.txt"可能包含了使用上述方法的代码示例或者更复杂的解决方案,...
这可以避免获取到的是内部网络中其他代理服务器的IP,而确保获取到的是最前端的客户端IP。 以下是一个改进后的Java方法,能够处理多级反向代理的情况: ```java public String getIpAddr(HttpServletRequest ...
在Controller类获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用...
此方法返回客户端的 IP 地址,但在经过代理服务器的情况下(如 Apache 或 Squid),可能会返回代理服务器的 IP 地址而非客户端的真实 IP 地址。因此,在实际应用中,这种方法可能会导致获取到的 IP 地址为 `...
在IT行业中,客户端IP修改是一个涉及网络连接和游戏服务器配置的高级话题。在这个场景中,我们关注的是"奇迹S9"这款游戏的客户端设置。"ServerInfo.bmd"文件是游戏客户端与服务器通信的关键组成部分,它包含了服务器...
但在某些特定场景下,如内部网络管理或安全验证需求较高的情况下,可能需要实现这一功能。 在Windows系统中,可以使用`nbtstat -A`命令来获取指定IP地址对应的MAC地址。具体实现如下: ```java public String ...
在服务器端,你可以使用各种编程语言(如Java、PHP、ASP.NET等)来处理请求并返回客户端IP。以下是一个简单的PHP示例: ```php header('Content-Type: application/x-www-form-urlencoded'); echo "ip=".$_...
代理服务器软件SuperProxy客户端FlashFXP代理设置方法代理服务器 - 代理服务器软件SuperProxy客户端FlashFXP代理设置方法代理服务器是指使用代理服务器软件SuperProxy和客户端FlashFXP进行代理设置的方法。该方法...
1. 集成安装:IP-GUARD客户端打包程序能够将多个客户端组件整合到一个安装包中,包括但不限于监控代理、策略执行模块、日志收集器等,简化了安装过程,提高部署效率。 2. 自定义配置:根据企业的具体需求,打包程序...
它提供了便捷的方法来获取和处理IP地址,尤其对于获取客户端IP地址在Web应用中至关重要。 首先,让我们详细了解一下`IpUtils`这个工具类。在Java中,获取IP地址通常涉及到`java.net`包中的类,如`InetAddress`。`...
然而,在某些情况下,如通过反向代理服务器(如Nginx、Apache)或负载均衡器访问时,这个方法可能返回的是代理服务器的IP而非客户端的真实IP。这时,我们需要检查X-Forwarded-For头部,该头部通常包含了客户端的IP...
在IT领域,尤其是在网络编程和自动化任务执行中,"单窗口单IP进程代理"是一种常见的...通过学习和理解这段源码,开发者可以深入理解如何在易语言中实现进程代理、IP切换以及sock5代理的运用,从而提升自己的编程技能。
总的来说,获取客户端IP地址在ASP.NET中相对简单,而获取MAC地址则涉及更复杂的网络环境和用户隐私问题,通常不直接在Web应用中操作。开发者应遵循最小权限原则和尊重用户隐私,避免不必要的数据收集。
在这种情况下,可以尝试使用其他`$_SERVER`变量来获取真实的客户端IP: 1. `$_SERVER['HTTP_CLIENT_IP']`: 如果HTTP_X_FORWARDED_FOR头被设置,这个变量可能包含客户端IP。 2. `$_SERVER['HTTP_X_FORWARDED']`: ...