-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
48 lines (47 loc) · 1.25 KB
/
server.py
File metadata and controls
48 lines (47 loc) · 1.25 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
import socket,threading,re,ssl,sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((str(sys.argv[1]),int(sys.argv[2])))
sock.listen(5)
def recvall(sock):
BUFF_SIZE = 4096
data = b''
while True:
part = sock.recv(BUFF_SIZE)
data += part
if len(part) < BUFF_SIZE:
break
return data
def syncer(s1,s2):
while True:
old = recvall(s2)
print(old)
s1.sendall(old)
def servant(c):
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
full = recvall(c)
try:
string = str(full.decode())
print(string)
except Exception:
print("NO DECODE")
if string.startswith("GET"):
who = re.search(r'Host: (.*?)\r\n',string).group(1)
print(":"+who+":")
s.connect((who,80))
s.sendall(full)
final = recvall(s)
print(final)
c.sendall(final)
elif string.startswith("CONNECT"):
who = re.search(r'Host: (.*?)\r\n',string).group(1).split(":")[0]
print(":"+who+":")
s.connect((who,443))
c.sendall(b'HTTP/1.1 200 Connection established\r\n\r\n')
threading.Thread(target=syncer,args=[c,s]).start()
threading.Thread(target=syncer,args=[s,c]).start()
while True:
pass
while True:
i,ip = sock.accept()
threading.Thread(target=servant,args=[i]).start()