Skip to content

Instantly share code, notes, and snippets.

@daniillnull
Last active December 13, 2023 00:16
Show Gist options
  • Select an option

  • Save daniillnull/3b4deb1694f6fbd3b318c1ea0efa4327 to your computer and use it in GitHub Desktop.

Select an option

Save daniillnull/3b4deb1694f6fbd3b318c1ea0efa4327 to your computer and use it in GitHub Desktop.
import asyncio
import secrets
import sys
from asyncio import StreamReader, StreamWriter
client_hello = bytes.fromhex("27740000480000" # Header: 10100, length: 72
"00000002"
"00000027"
"00000033"
"00000000"
"000000e2"
"0000002832666534313436393864383037663834393434373564666431353730663233386462356164323464"
"00000001"
"00000001")
server_hello = bytes.fromhex("4E840000210000" # Header: 20100, length: 33
"00000018ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEF"
"0102030405")
async def process_client(reader: StreamReader, writer: StreamWriter):
writer.write(client_hello)
response = await reader.readexactly(len(server_hello))
assert (response == server_hello)
print("Handshake OK")
while True:
writer.write(secrets.token_bytes(200))
await reader.readexactly(200)
print("Packet exchange OK")
async def process_server(reader: StreamReader, writer: StreamWriter):
request = await reader.readexactly(len(client_hello))
assert (request == client_hello)
writer.write(server_hello)
await writer.drain()
print("Handshake OK")
while True:
await reader.readexactly(200)
writer.write(secrets.token_bytes(200))
print("Packet exchange OK")
await asyncio.sleep(0.001 * secrets.randbelow(500))
async def main():
if len(sys.argv) > 1:
reader, writer = await asyncio.wait_for(asyncio.open_connection(sys.argv[1], 9331), 3)
print(f"Connected to {sys.argv[1]}")
await process_client(reader, writer)
else:
print("Running in server mode")
server = await asyncio.start_server(process_server, "0.0.0.0", 9331)
async with server:
await server.serve_forever()
asyncio.run(main())
@AmokDev
Copy link

AmokDev commented Dec 13, 2023

norm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment