Last active
December 13, 2023 00:16
-
-
Save daniillnull/3b4deb1694f6fbd3b318c1ea0efa4327 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
norm