检查代理类型

Posted

技术标签:

【中文标题】检查代理类型【英文标题】:Check proxy type 【发布时间】:2012-02-09 13:08:20 【问题描述】:

我想确定给定 IP 地址的代理是透明的还是匿名的。透明代理通过 HTTP_X_FORWARDED_FOR 或 HTTP_VIA 等标头中的真实 IP 连接到网站。我想检查这些代理,但我发现的所有解决方案都是为在服务器端工作而开发的,以测试传入连接的代理性。我的计划是通过代理向示例页面发出 Web 请求。如何检查代理发送的标头,最好使用 WebRequest 类?

编辑:那么是否有一些免费的 Web API 可以让我这样做?我并不热衷于在我自己的小型服务器上设置一个会被请求轰炸的脚本。

【问题讨论】:

如果您希望没有回答的人阅读您的问题,关闭并更改它可能不是一个好主意。而是提出一个新问题。 【参考方案1】:

只是您不需要这些标题。我可以通过向任何 get-my-IP 站点发送请求来检查代理的透明度,如果它返回我的 IP,那么它是透明的。如果不是,则代理是匿名的。所以步骤是:

    向任何没有代理的 get-my-IP 站点发送请求

    从响应中提取 IP 作为我的本地 IP 地址

    使用代理向任何 get-my-IP 站点发送新请求

    从响应中提取 IP 并将其与我的本地 IP 进行比较(步骤 2)

    if(LocalIp==ProxyIp) 那么代理是透明的,否则它是匿名的

【讨论】:

【参考方案2】:

这在技术上是不可能的,因为客户端只能看到代理返回给客户端的内容 - 代理可以在与目标服务器通信时做任何它想做的事情,并按照它想要的方式转换你的请求和来自服务器的答案......

要真正了解您需要什么代理,请查看服务器获取和发送回的内容,而不受代理的任何干扰...

【讨论】:

【参考方案3】:

所有解决方案都是服务器端的原因是,您正在谈论的标头仅从代理传递到服务器,并且永远不会在响应中再次返回给客户端。

换句话说,如果您计划检查从代理到服务器的请求中的 HTTP 标头,您需要在服务器端检查它们(如您找到的解决方案所做的那样)或在响应中主动将它们传回给客户检查。

无论哪种方式,您都不能只向随机页面发出请求并检查服务器获取的标头,服务器需要以某种方式参与。

【讨论】:

以上是关于检查代理类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使泛型代理类型与静态类型检查器一起使用

动态代理与动态编译

动态代理是基于什么原理(总结杨晓峰的博客)

Java 动态代理的原理

获取不同代理类型 AnyLogic 的等待时间

Java核心技术动态代理的原理