我正在编写一个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>'
示例输出:
我在哪里弄错了?提前谢谢。
答案 0 :(得分:0)
您引用的代理旨在隐藏客户的详细信息。出于这个目的,他们不会在X-Forwarded-For
或任何其他标题字段中将IP传递到您的服务器上。
尝试通过非匿名代理发送请求,并查看是否存在X-Forwarded-For
标头。并非所有代理都支持此功能,有些代理只需设置Via
或Forwarded
标头,您也应该寻找它。
答案 1 :(得分:-1)
无论如何,此信息不呈现给您。 当从用户向服务器发送http请求时,服务器知道ISP已分配给他的传入IP。 但是,当用户通过另一个代理服务器引导他的连接或者vpn外出请求由服务器(或vpn)传输他。当用户使用代理或vpn时,您可以看到的唯一IP是网络/服务器的IP,而不是原始IP地址。