2014-05-11 50 views
0

我在Windows 7上使用Python 2.7在內部網絡上運行網站。我有一個簡單的文本表單(帶有一個隱藏值:問題編號),其中用戶提交CTF比賽的答案。爲了防止來自同一臺計算機的多個響應,我需要收集客戶端的IPv6或MAC地址。我應該怎麼做到這一點?無論我使用GET還是POST方法都無關緊要。在使用CGI的Python HTTP Server託管的網站上收集用戶的IPv6或MAC地址

這是我目前接受回覆的腳本。它位於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文件中,然後提取所需的值? (我知道如何提取他們,如果我有日誌) 這是圖像,你可以看到,我一直在使用引導的網站。 terminal

我不想問太多問題,所以這裏有一些其他的事情,我想知道: 什麼是Python中的CGI設置和讀取的cookie的最佳方式?它是使用「設置cookie:x = y」還是導入Cookie模塊?有沒有其他方法?

有沒有辦法阻止某些用戶? 最後,我不允許使用任何其他尚未包含在Python 2.7中的模塊。

+0

IPv6地址對此沒有幫助。任何設備可以同時爲子網中的任意數量的IPv6地址(除非上游交換機或路由器阻止)。另外,您的日誌文件僅顯示IPv4的訪問權限,而不是IPv6。 – Dubu

+0

@Dubu,在上面的圖片中,顯示的是IPv6的事實。我的IPv4是24.131 .___.___。 – Electron

+2

那些不是IPv6地址;他們是RFC 1918地址。 –

回答

1

使用CGI時,Web服務器會將用戶的IP地址傳遞給REMOTE_ADDR環境變量中的腳本。所以你可以簡單地check this variable

remote_ip_address = os.environ['REMOTE_ADDR'] 

甲包含遠程IP地址和端口的元組,也可以從所創建的CGIHTTPRequestHandler獲得。

remote_ip_address_and_port = handler.client_address 
+0

我查過了,它能正常工作。還有其他環境變量可以用嗎? – Electron

+0

@ Electron1查看[Wikipedia](https://en.wikipedia.org/wiki/Common_Gateway_Interface)或[CGI標準](http://www.w3.org/CGI/)獲取列表。 –

相關問題