new algo
This commit is contained in:
36
udod.py
36
udod.py
@@ -1,41 +1,45 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
import base64
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
def shift(b, s):
|
||||||
|
r = b + s
|
||||||
|
if r >= 256:
|
||||||
|
r -= 256
|
||||||
|
elif r < 0:
|
||||||
|
r += 256
|
||||||
|
return r
|
||||||
|
|
||||||
def shift_seq(seq, byte_shift):
|
def shift_seq(seq, byte_shift):
|
||||||
result = bytearray(seq)
|
result = bytearray(seq)
|
||||||
for i in range(len(seq)):
|
for i in range(min(len(seq),128)):
|
||||||
result[i] = (result[i] + byte_shift) & 0xff
|
result[i] = (result[i] + byte_shift) & 0xff
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def encrypt(data):
|
def encrypt(data):
|
||||||
return shift_seq(data, 15)
|
return shift_seq(data, 15)
|
||||||
|
|
||||||
|
|
||||||
def decrypt(data):
|
def decrypt(data):
|
||||||
return shift_seq(data, -15)
|
return shift_seq(data, -15)
|
||||||
|
|
||||||
|
|
||||||
class Duplex:
|
class Duplex:
|
||||||
def __init__(self, s1, s1_remote, s1_transform,
|
def __init__(self, s1, s1_remote, s1_transform, s2, s2_remote, s2_transform, loop, mtu):
|
||||||
s2, s2_remote, s2_transform,
|
|
||||||
loop, mtu):
|
|
||||||
self.mtu = mtu
|
self.mtu = mtu
|
||||||
self.loop = loop
|
self.loop = loop
|
||||||
|
|
||||||
# loop.create_task(self.stream(s1,s2, s2_remote, s2_transform))
|
#loop.create_task(self.stream(s1,s2, s2_remote, s2_transform))
|
||||||
loop.create_task(self.stream(s2, s1, s1_remote, s1_transform))
|
loop.create_task(self.stream(s2,s1, s1_remote, s1_transform))
|
||||||
|
|
||||||
async def stream(self, rx, tx, tx_addr, transform):
|
async def stream(self, rx, tx, tx_addr, transform):
|
||||||
print("Starting stream", rx.getsockname(), '>>', tx_addr)
|
print("Starting stream", rx.getsockname(), '>>', tx_addr)
|
||||||
while True:
|
while True:
|
||||||
data = await self.loop.sock_recv(rx, self.mtu)
|
data = await self.loop.sock_recv(rx, self.mtu)
|
||||||
# print(rx.getsockname(),'>>', tx_addr, len(data),
|
#print(rx.getsockname(),'>>', tx_addr, len(data), data[:20].hex(), transform(data)[:20].hex())
|
||||||
# data[:20].hex(), transform(data)[:20].hex())
|
|
||||||
await self.loop.sock_sendto(tx, transform(data), tx_addr)
|
await self.loop.sock_sendto(tx, transform(data), tx_addr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
rx.setblocking(False)
|
rx.setblocking(False)
|
||||||
@@ -48,25 +52,23 @@ async def main():
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
data, addr = await loop.sock_recvfrom(rx, RX_MTU)
|
data, addr = await loop.sock_recvfrom(rx, RX_MTU)
|
||||||
# print("Received "+str(len(data))+" bytes", addr, data[:20])
|
#print("Received "+str(len(data))+" bytes", addr, data[:20])
|
||||||
|
|
||||||
if addr in connections.keys():
|
if addr in connections.keys():
|
||||||
tx = connections[addr]
|
tx = connections[addr]
|
||||||
else:
|
else:
|
||||||
connections[addr] = socket.socket(
|
connections[addr] = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
socket.AF_INET, socket.SOCK_DGRAM)
|
|
||||||
tx = connections[addr]
|
tx = connections[addr]
|
||||||
tx.setblocking(False)
|
tx.setblocking(False)
|
||||||
tx.bind(tx.getsockname())
|
tx.bind(tx.getsockname())
|
||||||
Duplex(rx, addr, RX_ALGO, connections[addr],
|
Duplex(rx, addr, RX_ALGO, connections[addr], (TX_IP, TX_PORT), TX_ALGO, loop, RX_MTU)
|
||||||
(TX_IP, TX_PORT), TX_ALGO, loop, RX_MTU)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tx.sendto(TX_ALGO(data), (TX_IP, TX_PORT))
|
tx.sendto(TX_ALGO(data), (TX_IP, TX_PORT))
|
||||||
except Exception:
|
except Exception:
|
||||||
print("reconnect", addr)
|
print("reconnect", addr)
|
||||||
del connections[addr]
|
del connections[addr]
|
||||||
# print("Sent", TX_ALGO(data)[:20], "to", (TX_IP, TX_PORT))
|
#print("Sent", TX_ALGO(data)[:20], "to", (TX_IP, TX_PORT))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
RX_IP = "127.0.0.1"
|
RX_IP = "127.0.0.1"
|
||||||
@@ -75,7 +77,7 @@ if __name__ == '__main__':
|
|||||||
RX_ALGO = encrypt
|
RX_ALGO = encrypt
|
||||||
|
|
||||||
TX_IP = "194.135.105.21"
|
TX_IP = "194.135.105.21"
|
||||||
TX_PORT = 5005
|
TX_PORT = 25565
|
||||||
TX_ALGO = decrypt
|
TX_ALGO = decrypt
|
||||||
|
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
|
|||||||
Reference in New Issue
Block a user