通过代理提出请求时获取原始IP

时间:2014-10-30 13:38:09

标签: python python-2.7 proxy cgi

我正在编写一个Python脚本来检查和显示传入的IP地址。只需使用以下内容即可直接获取IP地址:

remote_addr2 = os.environ.get('REMOTE_ADDR')

显示发出请求的正确IP地址。我面临的挑战是如果请求是使用代理进行的,则检测原始IP。从here,我收集我必须使用HTTP_X_FORWARDED_FOR,因此我尝试将其分配给变量并显示它,如下所示:

remote_addr1 = os.environ.get('HTTP_X_FORWARDED_FOR')

此输出始终为None。我看到一个类似的问题回答了OP was using PHP的位置。我想我在第二行尝试实现的是类似的,但我测试的每个代理(Anonymouse,HideMyAss,FilterByPass)都给了我“无”#39;作为输出。

这是完整的程序(基本的,我还没有实现验证):

#!/usr/bin/python

import os
import cgi

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>WHOIS - TESTs</title>'
print '</head>'

remote_addr1 = os.environ.get('HTTP_X_FORWARDED_FOR')
remote_addr2 = os.environ.get('REMOTE_ADDR')

print '<body>'
print remote_addr1
print remote_addr2
#print cgi.escape(os.environ["REMOTE_ADDR"])
print '</body>'
print '</html>'

示例输出:

output

我在哪里弄错了?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您引用的代理旨在隐藏客户的详细信息。出于这个目的,他们不会在X-Forwarded-For或任何其他标题字段中将IP传递到您的服务器上。

尝试通过非匿名代理发送请求,并查看是否存在X-Forwarded-For标头。并非所有代理都支持此功能,有些代理只需设置ViaForwarded标头,您也应该寻找它。

答案 1 :(得分:-1)

无论如何,此信息呈现给您。 当从用户向服务器发送http请求时,服务器知道ISP已分配给他的传入IP。 但是,当用户通过另一个代理服务器引导他的连接或者vpn外出请求由服务器(或vpn)传输他。当用户使用代理或vpn时,您可以看到的唯一IP是网络/服务器的IP,而不是原始IP地址。