-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProxy.py
More file actions
89 lines (75 loc) · 2.3 KB
/
Proxy.py
File metadata and controls
89 lines (75 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import socket
import sys
from thread import *
max_conn = 100
buffer_size = 4096
listening_port = 8888
# start the connection
def start():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', listening_port))
s.listen(max_conn)
print("[*]Server Started Succesfully [%d]\n" % (listening_port))
except:
print "ERROR"
s.close()
sys.exit(2)
while 1:
try:
conn, addr = s.accept()
data = conn.recv(buffer_size)
start_new_thread(conn_string, (conn, data, addr))
except:
s.close()
print "ERROR"
sys.exit(1)
s.close()
# find and customize webserver / url / data
def conn_string(conn, data, addr):
try:
first_line = data.split('\n')[0]
url = first_line.split(' ')[1]
http_pos = url.find("://")
if http_pos == -1:
temp = url
else:
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]
else:
port = int((temp[(port_pos + 1):])[:webserver_pos - port_pos - 1])
webserver = temp[:port_pos]
if str(webserver) == "localhost" or str(webserver) == "127.0.0.1": # customization for our server
data = "GET " + str(data)[25:]
proxy_server(webserver, port, conn, addr, data)
except Exception, e:
pass
# create proxy server
def proxy_server(webserver, port, conn, addr, data):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((webserver, port))
print "[*] ws: %s \n port: %s \n data %s \n" % (str(webserver), str(port), str(data))
s.send(data)
while 1:
reply = s.recv(buffer_size)
if len(reply) > 0:
conn.send(reply)
print "[*] Request done: %s" % (str(addr[0]))
else:
break
s.close()
conn.close()
except socket.error, (value, message):
s.close()
conn.close()
sys.exit(1)
start()