Python 如何在远程站点无法检测主机/主机IP的情况下使用代理?

Python 如何在远程站点无法检测主机/主机IP的情况下使用代理?,python,security,http,networking,proxy,Python,Security,Http,Networking,Proxy,我试图通过python使用代理,以便从不同的特定IP地址登录到站点。但是,某些网站似乎可以检测原始(主机)IP地址。我已经调查了一下这个问题,下面是我的发现 我尝试过四种代理方法: 具有代理设置的Firefox Python与mechanize.set\u代理一起使用 Firefox在一个使用内部网络的虚拟机中,与另一个充当路由器的虚拟机(有两个适配器:NAT和该内部网络)一起设置,以便内部网络流量通过代理路由 (使用Firefox作为实际浏览器) 对于前三个,我使用了相同的代理。Tor选项

我试图通过python使用代理,以便从不同的特定IP地址登录到站点。但是,某些网站似乎可以检测原始(主机)IP地址。我已经调查了一下这个问题,下面是我的发现

我尝试过四种代理方法:

  • 具有代理设置的Firefox
  • Python与
    mechanize.set\u代理一起使用
  • Firefox在一个使用内部网络的虚拟机中,与另一个充当路由器的虚拟机(有两个适配器:NAT和该内部网络)一起设置,以便内部网络流量通过代理路由
  • (使用Firefox作为实际浏览器)
对于前三个,我使用了相同的代理。Tor选项只是用于附加测试,而不是通过我自己的代理。以下是我注意到的预期行为:

  • 有了所有这些,如果我转到
    http://www.whatismyip.com/
    ,它提供了正确的IP地址(代理的IP地址,而不是主机的IP地址)
  • whatismyip.com
    说所有这些都“未检测到代理”
事实上,我访问的网站似乎确实认为我的IP是代理的IP。然而,有一些奇怪的情况让我觉得有些网站可以检测到我原来的IP地址

  • 在一种情况下,使用非美国代理通过Firefox访问非美国站点,该站点可以打印我的原始IP地址(来自美国)并拒绝我访问。这不是不可能吗?但是,通过具有相同非美国代理的虚拟机或具有非美国出口节点的TorBrowser访问站点时,站点无法执行此操作
  • 在类似的情况下,我从一个非美国代理访问另一个非美国站点。如果我从虚拟机中的Firefox登录到该站点,或者从带有非美国出口节点的TorBrowser登录,该站点将正常工作。但是,如果我尝试使用代理(虚拟机使用的同一代理)或
    mechanize
    通过Firefox登录,它将无法登录,并显示不相关的错误消息
  • 在第三种情况下,使用
    mechanize.set_proxies
    选项,我用过多的请求重载了一个站点,因此它决定阻止访问(每当我登录时,它都会故意超时)。我想它可能阻止了代理的IP地址。然而,当我从另一台主机上运行代码,但使用同一个代理时,它再次工作了一段时间,直到他们再次阻止它。(不用担心,我不会再骚扰这个网站了——我重新运行了这个程序,因为我认为这可能是我这边的一个小故障,而不是他们那边的一个块。)使用一个被阻止主机的Firefox+代理解决方案访问该网站也导致了故意超时
在我看来,所有这些网站,在Firefox+代理和
mechanize
案例中,都能够找到主机的IP地址,而在TorBrowser和虚拟机案例中,它们却没有


网站如何收集这些信息?阻止站点收集此信息的浏览器和虚拟机案例有什么不同?还有,我如何实现python脚本,以便通过代理访问的站点无法检测到主机/主机的IP地址?

代理可能在HTTP头中报告您的真实IP地址,尽管如果是这样,我很惊讶WhatIsMyIP站点没有告诉您

如果您第一次直接访问非美国网站,然后再次使用代理,那么该网站也可能在您第一次访问时在浏览器中设置了允许该网站在IP地址更改后识别您的身份。这可以解释您观察到的浏览器实例之间的差异


(我注意到学术期刊网站喜欢这样做。如果我试图从家里访问付费文章,但由于没有使用我所在大学的代理服务器而被阻止,我通常必须在允许代理访问后清除cookies。)

可能HTTP代理正在通过请求的
头将原始客户端放入
?尝试导航到您有权访问的服务器,并检查从proxy收到的邮件头。嗯,似乎不是这样,谢谢(如您所说的那样-让服务器打印出所有请求信息-似乎没有任何内容…)谢谢您的线索。我只是检查了一下,没有,代理没有添加HTTP头。我还以隐姓埋名模式/私人浏览模式访问了该页面,因此cookies不应该成为问题