Skip to content

Instantly share code, notes, and snippets.

@nuit
Last active August 29, 2015 14:24
Show Gist options
  • Save nuit/ef0736935a0f0e462ea5 to your computer and use it in GitHub Desktop.
Save nuit/ef0736935a0f0e462ea5 to your computer and use it in GitHub Desktop.
Simple web proxy in Python.
import socket, sys, thread, re
import httplib, urllib2
global ip_client
ip_client=urllib2.urlopen('https://enabledns.com/ip')
ip_client=ip_client.read()
def start():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', 8001))
s.listen(10)
print "[+] Ouvindo as conexoes..."
except Exception, e:
print "[-] Nao foi possivel iniciar o socket. :("
sys.exit(3)
while True:
try:
conn, addr = s.accept()
data = conn.recv(4096)
thread.start_new_thread(conn_string, (conn, addr, data))
except KeyboardInterrupt:
s.close()
print "\n[-] Servidor Proxy finalizando..."
print "[-] Saindo...\n"
sys.exit(1)
def conn_string(conn, addr, data):
try:
firstline = data.split('\n')[0]
url = firstline.split(' ')[1]
http_pos = url.find('://')
temp = url[(http_pos+3):]
port_pos = temp.find(':')
webserver_pos = temp.find('/')
if webserver_pos == -1:
webserver_pos = len(temp)
webserver = ""
port = -1
if (port_pos == -1 or webserver_pos < port_pos):
port = 80
webserver = temp[:webserver_pos] # site raiz
proxy_server(temp, webserver, port, conn, addr, data)
except Exception, e:
pass
def proxy_server(temp, webserver, port, conn, addr, data):
ip_host=socket.gethostbyname(webserver)
consite=httplib.HTTPSConnection(webserver)
consite.request("GET","/")
r1=consite.getresponse()
print "\n[+] HOST:",webserver
print "[+] HOST_IP:",ip_host
print "[+] CLIENT_IP:", ip_client
print "[+] STATUS: ", r1.status, r1.reason
consite.close()
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((webserver, port))
s.send(data)
if re.match(".*monitor.*", temp):
print "\n[!] MONITORANDO: ", temp
html='<html><h2>Acesso nao autorizado!</h2></html>'
conn.send(html)
conn.close()
s.send(html)
s.close()
while True:
reply = s.recv(4096)
if (len(reply)>0):
conn.send(reply)
conn_server(reply)
else:
break
s.close()
conn.close()
except socket.error, (value, message):
s.close()
conn.close()
sys.exit(2)
start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment