-
Notifications
You must be signed in to change notification settings - Fork 0
/
udp_proxy.py
118 lines (92 loc) · 3.27 KB
/
udp_proxy.py
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from threading import Thread
import socket
import importlib
import parser
import os
stop_threads = False
class Proxy2Server(Thread):
def __init__(self):
super(Proxy2Server, self).__init__()
self.game = None
self.gameAddressPort = None
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def run(self):
while True:
global stop_threads
if stop_threads:
break
byteAddressPair = self.server.recvfrom(4096)
data = byteAddressPair[0]
serverAddressPort = byteAddressPair[1]
try:
importlib.reload(parser)
parser.parse(serverAddressPort[0], data, "server")
except Exception as e:
print(e)
# print("<- [{}] {}".format(serverAddressPort[0].center(15, " "), data[:50].hex()))
if data:
self.game.sendto(data, self.gameAddressPort)
class Game2Proxy(Thread):
def __init__(self, port):
super(Game2Proxy, self).__init__()
self.server = None
self.port = port
self.gameAddressPort = None
self.serverAddressPort = None
self.game = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.game.bind(("127.0.0.1", self.port))
def run(self):
while True:
global stop_threads
if stop_threads:
break
byteAddressPair = self.game.recvfrom(4096)
data = byteAddressPair[0]
self.gameAddressPort = byteAddressPair[1]
try:
importlib.reload(parser)
parser.parse(self.gameAddressPort[0], data, "client")
except Exception as e:
print(e)
# print("-> [{}] {}".format(self.gameAddressPort[0].center(15, " "), data[:50].hex()))
if data:
self.server.sendto(data, self.serverAddressPort)
class Proxy(Thread):
def __init__(self, saddr, sport):
super(Proxy, self).__init__()
self.saddr = saddr
self.sport = sport
def run(self):
while True:
print("Staring a new connection")
self.g2p = Game2Proxy(self.sport)
self.p2s = Proxy2Server()
# Exchanging references to sockets
self.g2p.server = self.p2s.server
self.p2s.game = self.g2p.game
#Setting up serverAddressPort
self.g2p.serverAddressPort = (self.saddr, self.sport)
print("Connection Established")
# starting the threads
self.g2p.start()
while self.g2p.gameAddressPort == None:
continue
self.p2s.gameAddressPort = self.g2p.gameAddressPort
self.p2s.start()
def main():
global stop_threads
# server_addr = input("Server address: ")
# server_port = int(input("Server Port:"))
master = Proxy("95.216.217.79", 30000)
master.start()
while True:
# You can add further injection logic here
try:
choice = input("CMD: ")
if choice == "q" or choice == "Q":
stop_threads = True
os._exit(0)
except Exception as e:
print(e)
if __name__ == '__main__':
main()