我在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。
我不想问太多问题,所以我想知道其他一些事情: 在Python CGI中设置和读取cookie的最佳方法是什么?是否使用"设置cookie:x = y"或者导入Cookie模块?还有其他办法吗?
有没有办法阻止某些用户? 最后,我不允许使用Python 2.7中尚未包含的任何其他模块。
答案 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