【问题标题】:Collect user's IPv6 or MAC address on website hosted with Python HTTP Server with CGI在使用 CGI 的 Python HTTP Server 托管的网站上收集用户的 IPv6 或 MAC 地址
【发布时间】:2014-06-28 13:54:22
【问题描述】:

我在 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 文件中,然后提取所需的值? (如果我有日志,我知道如何提取它们) 如您所见,这是图像,我一直在为网站使用引导程序。
(来源:googledrive.com

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

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

【问题讨论】:

  • IPv6 地址对此没有帮助。任何设备都可以同时在子网中为自己提供任意数量的 IPv6 地址(除非上游交换机或路由器阻止)。此外,您的日志文件显示仅通过 IPv4 访问,而不是 IPv6。
  • @Dubu,在上图中,显示的是事实的 IPv6。我的 IPv4 是 24.131.___.___。
  • 那些不是 IPv6 地址;它们是 RFC 1918 地址。

标签: python html cookies cgi ipv6


【解决方案1】:

使用 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

【讨论】:

  • 我已经检查过了,它可以工作。还有其他有用的环境变量吗?
  • @Electron1 请参阅WikipediaCGI standard 获取列表。
猜你喜欢
  • 1970-01-01
  • 2015-07-21
  • 2015-03-24
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多