使用CGI在使用Python HTTP Server托管的网站上收集用户的IPv6或MAC地址

时间:2014-05-11 01:45:09

标签: python html cookies cgi ipv6

我在Windows 7上使用Python 2.7在内部网络上运行一个网站。我有一个简单的文本表单(有一个隐藏值:问题编号),用户提交他们的CTF竞赛答案。为防止来自同一台计算机的多个响应,我需要收集客户端的IPv6或MAC地址。我该怎么做到这一点?无论我使用GET还是POST方法都无关紧要。

这是我当前接受回复的脚本。它位于cgi-bin目录中。

import cgi

form = cgi.FieldStorage() 

p_number = form.getvalue('problem')
answer = form.getvalue('answer')

这是我托管服务器的脚本。

import BaseHTTPServer
import CGIHTTPServer
import cgitb; cgitb.enable()

def server(port):
    server = BaseHTTPServer.HTTPServer
    handler = CGIHTTPServer.CGIHTTPRequestHandler
    server_address = ("", port)
    httpd = server(server_address, handler)
    httpd.serve_forever()

在运行服务器时,我可以看到客户端访问的所有内容及其在终端中的IP。有没有办法在.txt文件中记录它,然后提取所需的值? (如果我有日志,我知道如何提取它们) 这是图像,你可以看到,我一直在使用网站的bootstrap。 terminal

我不想问太多问题,所以我想知道其他一些事情: 在Python CGI中设置和读取cookie的最佳方法是什么?是否使用"设置cookie:x = y"或者导入Cookie模块?还有其他办法吗?

有没有办法阻止某些用户? 最后,我不允许使用Python 2.7中尚未包含的任何其他模块。

1 个答案:

答案 0 :(得分:2)

使用CGI时,Web服务器会将用户的IP地址传递给REMOTE_ADDR环境变量中的脚本。所以你可以简单地check this variable

    remote_ip_address = os.environ['REMOTE_ADDR']

也可以从您创建的CGIHTTPRequestHandler获取包含远程IP地址和端口的元组。

    remote_ip_address_and_port = handler.client_address