{"id":18410558,"url":"https://github.com/vesche/sickserv","last_synced_at":"2026-03-27T02:27:53.147Z","repository":{"id":57467024,"uuid":"211982283","full_name":"vesche/sickserv","owner":"vesche","description":"client/server wrapper \u0026 framework for fast, encrypted comms","archived":false,"fork":false,"pushed_at":"2022-02-21T02:32:23.000Z","size":38,"stargazers_count":6,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T16:52:49.626Z","etag":null,"topics":["client","encrypted","https","python","rc4","requests","sanic","server","tls","websockets"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vesche.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-01T00:19:39.000Z","updated_at":"2022-04-13T11:17:10.000Z","dependencies_parsed_at":"2022-09-10T02:01:00.741Z","dependency_job_id":null,"html_url":"https://github.com/vesche/sickserv","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vesche%2Fsickserv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vesche%2Fsickserv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vesche%2Fsickserv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vesche%2Fsickserv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vesche","download_url":"https://codeload.github.com/vesche/sickserv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247637163,"owners_count":20971076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","encrypted","https","python","rc4","requests","sanic","server","tls","websockets"],"created_at":"2024-11-06T03:32:47.058Z","updated_at":"2026-03-27T02:27:53.110Z","avatar_url":"https://github.com/vesche.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sickserv\n\nThis is a Python 3.6+ client-server wrapper \u0026 framework that allows you to rapidly build simple, fast, encrypted, asynchronous, multi-client application communication.\n\nHighlights:\n* Client/server wrapper around [Sanic](https://github.com/huge-success/sanic), [requests](https://github.com/psf/requests), and [websocket-client](https://github.com/websocket-client/websocket-client).\n* Provides a framework for multi-client communication, based around unique system identifiers.\n* Supports simplistically sending and receiving RC4 encrypted JSON payloads.\n* Supports sending either string or byte values using base64 encoding.\n* Provides a client and server for either websocket or non-websocket applications.\n* Natively asynchronous, provided by Sanic.\n* Client/server support for RC4 rekey on-the-fly.\n\n## Install\n\nDo it up:\n```\n$ pip install sickserv --user\n```\n\n## Communication Flow\n\nInitial payloads are always JSON (with a defined endpoint), which are then base64 encoded, RC4 encrypted, and then sent over HTTP or HTTPS (on any port desired).\n\n```\nSend data:\nJSON -\u003e base64 encode values -\u003e RC4 encrypt -\u003e send (HTTPS)\n\nRecv data:\nrecv (HTTPS) -\u003e RC4 decrypt -\u003e base64 decode values -\u003e JSON\n```\n\n## Simple Example (non-WebSocket)\n\nSee the `examples/` folder for more, including: a MUD, chat server, and reverse shell.\n\nServer:\n```python\nfrom sickserv import server, set_init_key\nfrom sickserv.server import response\n\nset_init_key('yellow-submarine')\n\n@server.app.route('/test/\u003csysid\u003e', methods=['POST',])\nasync def test(request, sysid):\n    payload = server.unprocess_payload(sysid, request.body)\n    print(payload)\n    return_payload = server.process_payload(sysid, {'Look Mom': 'No Hands!'})\n    return response.text(return_payload)\n\nserver.run(port=1337)\n```\n\nClient:\n```python\nfrom sickserv import SickServClient, set_init_key\n\nset_init_key('yellow-submarine')\nssc = SickServClient('127.0.0.1', port=1337)\npayload = {\n    'endpoint': 'test',\n    'example': 'This is some example test data'\n}\nresponse = ssc.send(payload)\nprint(response)\n```\n\nServer side:\n```\n$ python server.py\n\n  _____ ____   __  __  _  _____   ___  ____  __ __ \n / ___/|    | /  ]|  |/ ]/ ___/  /  _]|    \\|  |  |\n(   \\_  |  | /  / |  ' /(   \\_  /  [_ |  D  )  |  |\n \\__  | |  |/  /  |    \\ \\__  ||    _]|    /|  |  |\n /  \\ | |  /   \\_ |     \\/  \\ ||   [_ |    \\|  :  |\n \\    | |  \\     ||  .  |\\    ||     ||  .  \\\\   / \n  \\___||____\\____||__|\\_| \\___||_____||__|\\_| \\_/  \n\n    v0.1.3 - https://github.com/vesche/sickserv \n\n[2019-10-26 06:12:47 -0500] [31313] [INFO] Goin' Fast @ http://0.0.0.0:1337\n[2019-10-26 06:12:47 -0500] [31313] [INFO] Starting worker [31313]\n{'example': 'This is some example test data'}\n[2019-10-26 06:12:57 -0500] - (sanic.access)[INFO][127.0.0.1:41550]: POST http://127.0.0.1:1337/test/b0610ba87aa2  200 60\n```\n\nClient side:\n```\n$ python test_client.py\n{'Look Mom': 'No Hands!'}\n```\n\n## Rekey\n\nAn initial, matching RC4 key must be supplied. However, the session can easily be rekeyed on the fly.\n\nA rekey is done from the client-end, like so:\n\n```python\nssc.rekey()                       # rekey with a random 16 character length key\nssc.rekey(length=32)              # rekey with a random 32 character length key\nssc.rekey(key='purple-submarine') # rekey with a custom defined key\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvesche%2Fsickserv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvesche%2Fsickserv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvesche%2Fsickserv/lists"}