在使用Python HTTP服务器和CGI托管的网站上收集用户的IPv6或MAC地址
我在一个内部网络上用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。

(来源: 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