commit e3331eaa4b03f4f3985c8018ac915d8c6c5b8d14 Author: Alve Svarén Date: Fri Oct 9 18:26:30 2020 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98203cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,141 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# Project specific ignores +regionInfo.dat \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..f84e43b --- /dev/null +++ b/main.py @@ -0,0 +1,56 @@ +from sys import argv + +SERVER_SUFFIX = "-Master-1" + +def gen_file(region_name: str, ip_address: str = "127.0.0.1", port: int = 22023): + if (len(region_name) + len(SERVER_SUFFIX) > 0xff): + raise ValueError("Region name too long") + if (len(ip_address) > 0xff): + raise ValueError("IP-address too long") + if (port > 0xffff * 5): + raise ValueError("Port too high") + + # Append region name + data = bytearray([0x00] * 4 + [len(region_name)]) + data += region_name.encode("ascii") + + # Append ip address + data.extend([len(ip_address)]) + data += ip_address.encode("ascii") + data.extend([0x01] + [0x00] * 3) + + # Append server name + server_name = region_name + SERVER_SUFFIX + data.extend([len(server_name)]) + data += server_name.encode("ascii") + + # Append ip address in byte form + ip_address_bytes = bytearray() + for value in ip_address.split("."): + ip_address_bytes.extend([int(value)]) + data += ip_address_bytes + data.extend([port & 0xff, (port & 0xff00) >> 8]) + data.extend([0x00] * 4) + + print(data) + return data + +""" +Creates and writes the among us regionInfo.dat file +Example: +```py +try: + writeFile("Example server", "169.0.0.1", port=12345)) + print("Success!") +except Exception as error: + print(error) +``` +""" +def write_file(region_name: str, ip_address: str = "127.0.0.1", file_name: str = "regionInfo.dat", port: int = 22023): + data = gen_file(region_name, ip_address, port) + with open(file_name, "wb") as file: + file.write(data) + +if __name__ == "__main__": + print(f"Creating file using {argv[1:]}") + write_file(*argv[1:]) \ No newline at end of file