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

1 投票
1 回答
993 浏览
提问于 2025-04-18 06:10

我在一个内部网络上用Python 2.7和Windows 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
(来源: googledrive.com)

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

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

1 个回答

2

当你使用CGI的时候,网络服务器会把用户的IP地址传递给你的脚本,这个信息会放在一个叫做REMOTE_ADDR的环境变量里。所以你只需要简单地查看这个变量就可以了。

    remote_ip_address = os.environ['REMOTE_ADDR']

你还可以从你创建的CGIHTTPRequestHandler中获取一个包含远程IP地址和端口号的元组。

    remote_ip_address_and_port = handler.client_address

撰写回答