2010-03-24 12 views
17

Ho cercato la sintassi per reindirizzare un URL speciale a un server remoto per eseguire alcuni test XSS. Qualche idea?Come inoltrare una richiesta a un URL diverso in python

import SimpleHTTPServer 
import SocketServer 

class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     print self.path 
     if self.path == '/analog': 
-------------------->return "http://12b.dk/analog"??? 
     return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

theport = 1234 
Handler = myHandler 
pywebserver = SocketServer.TCPServer(("", theport), Handler) 

print "Python based web server. Serving at port", theport 
pywebserver.serve_forever() 

risposta

16

Per un reindirizzamento, è necessario restituire un codice di 301, oltre a un colpo di testa Location. Probabilmente si può provare qualcosa di simile:

class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(301) 
     self.send_header('Location','http://www.example.com') 
     self.end_headers() 
6

Questo è un pezzo completo di codice per reindirizzare, salvare il file ed eseguirlo come un programma Python. per terminare, ctrl + c.

import SimpleHTTPServer 
import SocketServer 
class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     print self.path 
     self.send_response(301) 
     new_path = '%s%s'%('http://newserver.com', self.path) 
     self.send_header('Location', new_path) 
     self.end_headers() 

PORT = 8000 
handler = SocketServer.TCPServer(("", PORT), myHandler) 
print "serving at port 8000" 
handler.serve_forever() 
1

codice di stato HTTP 301 ha significato della richiesta trasferisce definitivamente e deve essere reindirizzato URI suggerito che è impostato a campo di intestazione di risposta, posizione. Tuttavia, il reindirizzamento avviene in base all'implementazione dei browser.

Invece di 301, restituendo 303 indica al browser la risposta per la richiesta può essere trovata sotto altro URI e gestisce in modo efficace il browser per reindirizzare la richiesta GET a un altro URI. Hense, 303 è un'opzione migliore.

0

Python 3

In python3 è fatto molto simile ad altre risposte, ma abbastanza diverso da giustificare dimostrazione.

Questo è uno script che non fa altro che ascoltare sulla porta passata come argomento e inviare un 302 ("Found" alias temporaneo) reindirizzare l'URL passato come argomento . (E ha un messaggio d'aiuto.)

#!/usr/bin/env python3 

import sys 
from http.server import HTTPServer, BaseHTTPRequestHandler 

if len(sys.argv)-1 != 2: 
    print(""" 
Usage: {} <port_number> <url> 
    """.format(sys.argv[0])) 
    sys.exit() 

class Redirect(BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(302) 
     self.send_header('Location', sys.argv[2]) 
     self.end_headers() 

HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() 

Si chiamano come:

sudo ./redirect.py 80 http://jenkins.example.com:8080/ 

Questo esempio dovrebbe darvi abbastanza per scrivere ciò che mai tipo di funzione desiderata.

Problemi correlati