我正在尝试通过 python 使用代理,以便从不同的特定 IP 地址登录到站点。但是,某些网站似乎可以检测到原始(主机)IP 地址。我已经对这个问题进行了一些调查,这就是我发现的。
我尝试过四种代理方法:
- 带有代理设置的 Firefox。
- Python 与
mechanize.set_proxies
. - 使用内部网络的虚拟机中的 Firefox 以及充当路由器的另一台虚拟机(具有两个适配器:一个 NAT 和该内部网络)进行设置,以使内部网络流量通过代理进行路由。
- TorBrowser(使用 Firefox 作为实际浏览器)。
对于前三个,我使用了相同的代理。Tor 选项只是为了进行额外的测试,而不是通过我自己的代理。以下是我注意到的预期行为:
- 有了所有这些,如果我转到
http://www.whatismyip.com/
,它会给出正确的 IP 地址(代理的 IP 地址,而不是主机的 IP 地址)。 whatismyip.com
所有这些都说“未检测到代理”。
事实上,我访问的网站似乎确实认为我的 IP 是代理的 IP。但是,有一些奇怪的情况让我认为某些网站可以以某种方式检测到我的原始 IP 地址。
- 在一种情况下,通过 Firefox 使用非美国代理访问非美国站点,该站点实际上能够打印我的原始 IP 地址(来自美国)并拒绝我访问。这不应该是不可能的吗?但是,通过具有相同非美国代理的虚拟机或具有非美国出口节点的 TorBrowser 访问该站点,该站点无法这样做。
- 在类似的情况下,我正在通过非美国代理访问另一个非美国站点。如果我从虚拟机中的 Firefox 或使用非美国出口节点的 TorBrowser 登录该站点,该站点将正常运行。但是,如果我尝试使用代理(与虚拟机使用的代理相同)或使用代理通过 Firefox 登录
mechanize
,它将无法登录并显示不相关的错误消息。 - 在第三种情况下,使用该
mechanize.set_proxies
选项,我使一个请求过多的站点超载,因此它决定阻止访问(每当我登录时它都会故意超时)。我认为它可能阻止了代理的 IP 地址。但是,当我从另一台主机上运行代码,但使用相同的代理时,它再次工作了一段时间,直到他们再次阻止它。(不用担心,我不会再骚扰该网站 - 我重新运行了该程序,因为我认为这可能是我的一个小故障,而不是他们的一个障碍。)使用 Firefox + 代理访问该网站来自被阻止主机之一的解决方案也导致了有目的的超时。
在我看来,所有这些站点,在 Firefox + 代理和mechanize
案例中,都能够找到有关主机 IP 地址的信息,而在 TorBrowser 和虚拟机案例中,它们却没有。
这些网站如何收集这些信息?TorBrowser 和阻止站点收集此信息的虚拟机案例有什么不同?而且,我将如何实现我的 python 脚本,以便我通过代理访问的站点无法检测到主机/主机的 IP 地址?