This repository has been archived on 2020-03-29. You can view files and clone it, but cannot push or open issues or pull requests.
sampy_archive/proxy.py
2018-09-28 21:58:12 +02:00

95 lines
2.7 KiB
Python

import sys
import socket
from threading import Thread
import select
class Proxy(Thread):
BUFF_SIZE = 65535
def __init__(self, listen, target):
Thread.__init__(self)
self.listen = listen
self.target = target
self.clients = []
def run(self):
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
client.bind(self.listen) # Listen
#master.listen(5)
target = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
target.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
target.connect(self.target) # Server
#target.
#client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#client.connect(self.listen)
client.setblocking(0)
target.setblocking(0)
while True:
(c, _, _) = select.select([client],[],[],0)
if c:
c_data, c_addr = client.recvfrom(self.BUFF_SIZE)
#print("[C] data:{} addr:{}".format(c_data, c_addr))
if c_data:
"""
if c_data[:2] == b"\x08\x1e":
print("Editing port check: {}".format(c_data.hex()))
c_data = b"\x08\x1e\x77\xda"
"""
print("[C] -> {}".format(c_data))
with open("logs/client-raw.log", "ab") as f:
f.write(c_data + b"\r\n")
with open("logs/client-hex.log", "a") as f:
f.write(c_data.hex() + "\r\n")
with open("logs/all-raw.log", "ab") as f:
f.write(c_data + b"\r\n")
with open("logs/all-hex.log", "a") as f:
f.write(c_data.hex() + "\r\n")
target.sendto(c_data, self.target)
(s, _, _) = select.select([target],[],[],0)
if s:
s_data = target.recv(self.BUFF_SIZE)
#print("[S] data:{}".format(s_data))
if s_data:
print("[C] <- {}".format(s_data))
with open("logs/server-raw.log", "ab") as f:
f.write(s_data + b"\r\n")
with open("logs/server-hex.log", "a") as f:
f.write(s_data.hex() + "\r\n")
with open("logs/all-raw.log", "ab") as f:
f.write(s_data + b"\r\n")
with open("logs/all-hex.log", "a") as f:
f.write(s_data.hex() + "\r\n")
client.sendto(s_data, c_addr)
client.close()
if len(sys.argv) < 4:
print("Missing arguments.")
print("Usage: $ python proxy.py [proxy_port] [server_ip] [server_port]")
print("Sample: $ python proxy.py 7777 192.168.2.1 7777")
exit()
LISTEN = ("0.0.0.0", int(sys.argv[1]))
TARGET = (sys.argv[2], int(sys.argv[3]))
##while True:
# Delete old log files
open("logs/client-raw.log", "w").close()
open("logs/client-hex.log", "w").close()
open("logs/server-raw.log", "w").close()
open("logs/server-hex.log", "w").close()
open("logs/all-raw.log", "w").close()
open("logs/all-hex.log", "w").close()
proxy = Proxy(LISTEN, TARGET)
proxy.start()
proxy.join()
print("Error?")