commit 57bb933d16d1655cb1a6a946eedb41989d0999e7 Author: Magnus Walbeck <magnus.walbeck@walbeck.it> Date: Wed Dec 14 13:49:18 2022 +0100 Initial version diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..5376b8a --- /dev/null +++ b/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length = 80 +select = C,E,F,W,B,B950 +ignore = E203, E501, W503 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/README.md b/README.md new file mode 100644 index 0000000..76cbc48 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Genhost + +Small python application to generate hostnames based on a wordlist. Inspired by https://github.com/elasticdog/genhost + +The original wordlist is taken from here, https://web.archive.org/web/20090918202746/http://tothink.com/mnemonic/wordlist.html and there is a version ready to go here in this repo. diff --git a/genhost/__init__.py b/genhost/__init__.py new file mode 100644 index 0000000..5f3c024 --- /dev/null +++ b/genhost/__init__.py @@ -0,0 +1,3 @@ +from importlib.metadata import version + +__version__ = version(__package__) diff --git a/genhost/__main__.py b/genhost/__main__.py new file mode 100644 index 0000000..7739cf7 --- /dev/null +++ b/genhost/__main__.py @@ -0,0 +1,3 @@ +from genhost.main import main + +main() diff --git a/genhost/main.py b/genhost/main.py new file mode 100644 index 0000000..417dcaa --- /dev/null +++ b/genhost/main.py @@ -0,0 +1,135 @@ +""" +Generate a random hostname based on a wordlist +""" + +import argparse +import logging +import random +import os +import sys +from genhost.__init__ import __version__ + + +def setup_arguments(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "integer", + metavar="N", + type=int, + nargs="?", + help="The number of hostnames to commission", + ) + parser.add_argument( + "-l", + "--list", + action="store_true", + help="List all the commissioned hostnames", + ) + parser.add_argument( + "-r", + "--reuse", + help="Decommission hostname(s) and return them to the pool of available hostnames", + ) + parser.add_argument( + "-w", + "--wordlist", + help="""Location of wordlist to use. Only needed if you want to use a wordlist + that isn't in the default location""", + ) + parser.add_argument( + "-V", + "--version", + action="store_true", + help="Display version number", + ) + return parser + + +def main() -> None: + logging.basicConfig(format="%(asctime)s - %(message)s", level=logging.WARNING) + parser = setup_arguments() + args = parser.parse_args() + + logging.debug(args) + + if args.wordlist: + wordlist_path = args.wordlist + elif os.environ.get("HOME"): + wordlist_path = ( + os.environ.get("HOME") + "/.config/genhost/wordlist.txt" # type: ignore + ) + else: + logging.fatal( + "No wordlist was specified and it wasn't possible to retrieve" + "default location for wordlist. Please specify a wordlist manually." + ) + sys.exit() + + if args.version: + display_version() + if args.reuse: + decommission_hostname(wordlist_path, args.reuse) + elif args.list: + list_hostnames(wordlist_path) + elif args.integer: + commission_hostname(wordlist_path, args.integer) + + +def commission_hostname(wordlist_path: str, number_of_hosts: int) -> None: + words = read_wordlist(wordlist_path) + + for _ in range(number_of_hosts): + selected_word = random.choice(words) # nosec + + while selected_word.startswith("#"): + selected_word = random.choice(words) # nosec + + print(selected_word.strip()) + + try: + index = words.index(selected_word) + words[index] = "#" + selected_word + except ValueError: + logging.fatal( + "Randomly selected the word, %s, but it doesn't exist in the word list.", + selected_word, + ) + return + + write_wordlist(wordlist_path, words) + + +def decommission_hostname(wordlist_path: str, hostname: str) -> None: + words = read_wordlist(wordlist_path) + + try: + index = words.index("#" + hostname + "\n") + words[index] = hostname + "\n" + write_wordlist(wordlist_path, words) + print(f"The hostname, {hostname}, has been decommissioned") + except ValueError: + logging.error("The hostname, %s, is not currently commissioned.", hostname) + + +def write_wordlist(wordlist_path: str, words: list[str]) -> None: + with open(wordlist_path, "w", encoding="utf_8") as f: + f.writelines(words) + + +def read_wordlist(wordlist_path: str) -> list[str]: + with open(wordlist_path, "r", encoding="utf_8") as f: + words = f.readlines() + + return words + + +def list_hostnames(wordlist_path: str) -> None: + words = read_wordlist(wordlist_path) + + for word in words: + if word.startswith("#"): + print(word.strip("#\n")) + + +def display_version() -> None: + print(__version__) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..6cc95c8 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,251 @@ +[[package]] +name = "astroid" +version = "2.12.13" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "dill" +version = "0.3.6" +description = "serialize all of python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile-deprecated-finder = ["pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "lazy-object-proxy" +version = "1.8.0" +description = "A fast and thorough lazy object proxy." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "platformdirs" +version = "2.6.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pylint" +version = "2.15.8" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +astroid = ">=2.12.13,<=2.14.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = ">=0.2" +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tomlkit" +version = "0.11.6" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "wrapt" +version = "1.14.1" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[metadata] +lock-version = "1.1" +python-versions = "^3.10" +content-hash = "4ce5fc18f365ccf49f86d99f92912950c077883d28be5f3ab1144f40aabca7b8" + +[metadata.files] +astroid = [ + {file = "astroid-2.12.13-py3-none-any.whl", hash = "sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907"}, + {file = "astroid-2.12.13.tar.gz", hash = "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +dill = [ + {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, + {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, + {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, + {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, + {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, +] +mccabe = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] +platformdirs = [ + {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, + {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, +] +pylint = [ + {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"}, + {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tomlkit = [ + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, +] +wrapt = [ + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b14e8ec --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[tool.poetry] +name = "genhost" +version = "0.1.0" +description = "Generate a random hostname based on a wordlist" +authors = ["Magnus Walbeck <mw@mwalbeck.org>"] +readme = "README.md" +repository = "https://git.walbeck.it/walbeck-it/genhost" +packages = [{ include = "genhost" }] + +[tool.poetry.scripts] +genhost = "genhost.main:main" + +[tool.poetry.dependencies] +python = "^3.10" + +[tool.poetry.group.dev.dependencies] +pylint = "^2.15.8" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.pylint.'MESSAGES CONTROL'] +good-names = "i,j,k,ex,Run,_,e,r,f" +disable = "C0116,C0114" diff --git a/wordlist.txt b/wordlist.txt new file mode 100644 index 0000000..8a01dcf --- /dev/null +++ b/wordlist.txt @@ -0,0 +1,1633 @@ +acrobat +africa +alaska +albert +albino +album +alcohol +alex +alpha +amadeus +amanda +amazon +america +analog +animal +antenna +antonio +apollo +april +aroma +artist +aspirin +athlete +atlas +banana +bandit +banjo +bikini +bingo +bonus +camera +canada +carbon +casino +catalog +cinema +citizen +cobra +comet +compact +complex +context +credit +critic +crystal +culture +david +delta +dialog +diploma +doctor +domino +dragon +drama +extra +fabric +final +focus +forum +galaxy +gallery +global +harmony +hotel +humor +index +japan +kilo +lemon +liter +lotus +mango +melon +menu +meter +metro +mineral +model +music +object +piano +pirate +plastic +radio +report +signal +sport +studio +subject +super +tango +taxi +tempo +tennis +textile +tokyo +total +tourist +video +visa +academy +alfred +atlanta +atomic +barbara +bazaar +brother +budget +cabaret +cadet +candle +capsule +caviar +channel +chapter +circle +cobalt +comrade +condor +crimson +cyclone +darwin +declare +denver +desert +divide +dolby +domain +double +eagle +echo +eclipse +editor +educate +edward +effect +electra +emerald +emotion +empire +eternal +evening +exhibit +expand +explore +extreme +ferrari +forget +freedom +friday +fuji +galileo +genesis +gravity +habitat +hamlet +harlem +helium +holiday +hunter +ibiza +iceberg +imagine +infant +isotope +jackson +jamaica +jasmine +java +jessica +kitchen +lazarus +letter +license +lithium +loyal +lucky +magenta +manual +marble +maxwell +mayor +monarch +monday +money +morning +mother +mystery +native +nectar +nelson +network +nikita +nobel +nobody +nominal +norway +nothing +number +october +office +oliver +opinion +option +order +outside +package +pandora +panther +papa +pattern +pedro +pencil +people +phantom +philips +pioneer +pluto +podium +portal +potato +process +proxy +pupil +python +quality +quarter +quiet +rabbit +radical +radius +rainbow +ramirez +ravioli +raymond +respect +respond +result +resume +richard +river +roger +roman +rondo +sabrina +salary +salsa +sample +samuel +saturn +savage +scarlet +scorpio +sector +serpent +shampoo +sharon +silence +simple +society +sonar +sonata +soprano +sparta +spider +sponsor +abraham +action +active +actor +adam +address +admiral +adrian +agenda +agent +airline +airport +alabama +aladdin +alarm +algebra +alibi +alice +alien +almond +alpine +amber +amigo +ammonia +analyze +anatomy +angel +annual +answer +apple +archive +arctic +arena +arizona +armada +arnold +arsenal +arthur +asia +aspect +athena +audio +august +austria +avenue +average +axiom +aztec +bagel +baker +balance +ballad +ballet +bambino +bamboo +baron +basic +basket +battery +belgium +benefit +berlin +bermuda +bernard +bicycle +binary +biology +bishop +blitz +block +blonde +bonjour +boris +boston +bottle +boxer +brandy +bravo +brazil +bridge +british +bronze +brown +bruce +bruno +brush +burger +burma +cabinet +cactus +cafe +cairo +calypso +camel +campus +canal +cannon +canoe +cantina +canvas +canyon +capital +caramel +caravan +career +cargo +carlo +carol +carpet +cartel +cartoon +castle +castro +cecilia +cement +center +century +ceramic +chamber +chance +change +chaos +charlie +charm +charter +cheese +chef +chemist +cherry +chess +chicago +chicken +chief +china +cigar +circus +city +clara +classic +claudia +clean +client +climax +clinic +clock +club +cockpit +coconut +cola +collect +colombo +colony +color +combat +comedy +command +company +concert +connect +consul +contact +contour +control +convert +copy +corner +corona +correct +cosmos +couple +courage +cowboy +craft +crash +cricket +crown +cuba +dallas +dance +daniel +decade +decimal +degree +delete +deliver +delphi +deluxe +demand +demo +denmark +derby +design +detect +develop +diagram +diamond +diana +diego +diesel +diet +digital +dilemma +direct +disco +disney +distant +dollar +dolphin +donald +drink +driver +dublin +duet +dynamic +earth +east +ecology +economy +edgar +egypt +elastic +elegant +element +elite +elvis +email +empty +energy +engine +english +episode +equator +escape +escort +ethnic +europe +everest +evident +exact +example +exit +exotic +export +express +factor +falcon +family +fantasy +fashion +fiber +fiction +fidel +fiesta +figure +film +filter +finance +finish +finland +first +flag +flash +florida +flower +fluid +flute +folio +ford +forest +formal +formula +fortune +forward +fragile +france +frank +fresh +friend +frozen +future +gabriel +gamma +garage +garcia +garden +garlic +gemini +general +genetic +genius +germany +gloria +gold +golf +gondola +gong +good +gordon +gorilla +grand +granite +graph +green +group +guide +guitar +guru +hand +happy +harbor +harvard +havana +hawaii +helena +hello +henry +hilton +history +horizon +house +human +icon +idea +igloo +igor +image +impact +import +india +indigo +input +insect +instant +iris +italian +jacket +jacob +jaguar +janet +jargon +jazz +jeep +john +joker +jordan +judo +jumbo +june +jungle +junior +jupiter +karate +karma +kayak +kermit +king +koala +korea +labor +lady +lagoon +laptop +laser +latin +lava +lecture +left +legal +level +lexicon +liberal +libra +lily +limbo +limit +linda +linear +lion +liquid +little +llama +lobby +lobster +local +logic +logo +lola +london +lucas +lunar +machine +macro +madam +madonna +madrid +maestro +magic +magnet +magnum +mailbox +major +mama +mambo +manager +manila +marco +marina +market +mars +martin +marvin +mary +master +matrix +maximum +media +medical +mega +melody +memo +mental +mentor +mercury +message +metal +meteor +method +mexico +miami +micro +milk +million +minimum +minus +minute +miracle +mirage +miranda +mister +mixer +mobile +modem +modern +modular +moment +monaco +monica +monitor +mono +monster +montana +morgan +motel +motif +motor +mozart +multi +museum +mustang +natural +neon +nepal +neptune +nerve +neutral +nevada +news +next +ninja +nirvana +normal +nova +novel +nuclear +numeric +nylon +oasis +observe +ocean +octopus +olivia +olympic +omega +opera +optic +optimal +orange +orbit +organic +orient +origin +orlando +oscar +oxford +oxygen +ozone +pablo +pacific +pagoda +palace +pamela +panama +pancake +panda +panel +panic +paradox +pardon +paris +parker +parking +parody +partner +passage +passive +pasta +pastel +patent +patient +patriot +patrol +pegasus +pelican +penguin +pepper +percent +perfect +perfume +period +permit +person +peru +phone +photo +picasso +picnic +picture +pigment +pilgrim +pilot +pixel +pizza +planet +plasma +plaza +pocket +poem +poetic +poker +polaris +police +politic +polo +polygon +pony +popcorn +popular +postage +precise +prefix +premium +present +price +prince +printer +prism +private +prize +product +profile +program +project +protect +proton +public +pulse +puma +pump +pyramid +queen +radar +ralph +random +rapid +rebel +record +recycle +reflex +reform +regard +regular +relax +reptile +reverse +ricardo +right +ringo +risk +ritual +robert +robot +rocket +rodeo +romeo +royal +russian +safari +salad +salami +salmon +salon +salute +samba +sandra +santana +sardine +school +scoop +scratch +screen +script +scroll +second +secret +section +segment +select +seminar +senator +senior +sensor +serial +service +shadow +sharp +sheriff +shock +short +shrink +sierra +silicon +silk +silver +similar +simon +single +siren +slang +slogan +smart +smoke +snake +social +soda +solar +solid +solo +sonic +source +soviet +special +speed +sphere +spiral +spirit +spring +static +status +stereo +stone +stop +street +strong +student +style +sultan +susan +sushi +suzuki +switch +symbol +system +tactic +tahiti +talent +tarzan +telex +texas +theory +thermos +tiger +titanic +tomato +topic +tornado +toronto +torpedo +totem +tractor +traffic +transit +trapeze +travel +tribal +trick +trident +trilogy +tripod +tropic +trumpet +tulip +tuna +turbo +twist +ultra +uniform +union +uranium +vacuum +valid +vampire +vanilla +vatican +velvet +ventura +venus +vertigo +veteran +victor +vienna +viking +village +vincent +violet +violin +virtual +virus +vision +visitor +visual +vitamin +viva +vocal +vodka +volcano +voltage +volume +voyage +water +weekend +welcome +western +window +winter +wizard +wolf +world +xray +yankee +yoga +yogurt +yoyo +zebra +zero +zigzag +zipper +zodiac +zoom +acid +adios +agatha +alamo +alert +almanac +aloha +andrea +anita +arcade +aurora +avalon +baby +baggage +balloon +bank +basil +begin +biscuit +blue +bombay +botanic +brain +brenda +brigade +cable +calibre +carmen +cello +celtic +chariot +chrome +citrus +civil +cloud +combine +common +cool +copper +coral +crater +cubic +cupid +cycle +depend +door +dream +dynasty +edison +edition +enigma +equal +eric +event +evita +exodus +extend +famous +farmer +food +fossil +frog +fruit +geneva +gentle +george +giant +gilbert +gossip +gram +greek +grille +hammer +harvest +hazard +heaven +herbert +heroic +hexagon +husband +immune +inca +inch +initial +isabel +ivory +jason +jerome +joel +joshua +journal +judge +juliet +jump +justice +kimono +kinetic +leonid +leopard +lima +maze +medusa +member +memphis +michael +miguel +milan +mile +miller +mimic +mimosa +mission +monkey +moral +moses +mouse +nancy +natasha +nebula +nickel +nina +noise +orchid +oregano +origami +orinoco +orion +othello +paper +paprika +prelude +prepare +pretend +promise +prosper +provide +puzzle +remote +repair +reply +rival +riviera +robin +rose +rover +rudolf +saga +sahara +scholar +shelter +ship +shoe +sigma +sister +sleep +smile +spain +spark +split +spray +square +stadium +star +storm +story +strange +stretch +stuart +subway +sugar +sulfur +summer +survive +sweet +swim +table +taboo +target +teacher +telecom +temple +tibet +ticket +tina +today +toga +tommy +tower +trivial +tunnel +turtle +twin +uncle +unicorn +unique +update +valery +vega +version +voodoo +warning +william +wonder +year +yellow +young +absent +absorb +absurd +accent +alfonso +alias +ambient +anagram +andy +anvil +appear +apropos +archer +ariel +armor +arrow +austin +avatar +axis +baboon +bahama +bali +balsa +barcode +bazooka +beach +beast +beatles +beauty +before +benny +betty +between +beyond +billy +bison +blast +bless +bogart +bonanza +book +border +brave +bread +break +broken +bucket +buenos +buffalo +bundle +button +buzzer +byte +caesar +camilla +canary +candid +carrot +cave +chant +child +choice +chris +cipher +clarion +clark +clever +cliff +clone +conan +conduct +congo +costume +cotton +cover +crack +current +danube +data +decide +deposit +desire +detail +dexter +dinner +donor +druid +drum +easy +eddie +enjoy +enrico +epoxy +erosion +except +exile +explain +fame +fast +father +felix +field +fiona +fire +fish +flame +flex +flipper +float +flood +floor +forbid +forever +fractal +frame +freddie +front +fuel +gallop +game +garbo +gate +gelatin +gibson +ginger +giraffe +gizmo +glass +goblin +gopher +grace +gray +gregory +grid +griffin +ground +guest +gustav +gyro +hair +halt +harris +heart +heavy +herman +hippie +hobby +honey +hope +horse +hostel +hydro +imitate +info +ingrid +inside +invent +invest +invite +ivan +james +jester +jimmy +join +joseph +juice +julius +july +kansas +karl +kevin +kiwi +ladder +lake +laura +learn +legacy +legend +lesson +life +light +list +locate +lopez +lorenzo +love +lunch +malta +mammal +margin +margo +marion +mask +match +mayday +meaning +mercy +middle +mike +mirror +modest +morph +morris +mystic +nadia +nato +navy +needle +neuron +never +newton +nice +night +nissan +nitro +nixon +north +oberon +octavia +ohio +olga +open +opus +orca +oval +owner +page +paint +palma +parent +parlor +parole +paul +peace +pearl +perform +phoenix +phrase +pierre +pinball +place +plate +plato +plume +pogo +point +polka +poncho +powder +prague +press +presto +pretty +prime +promo +quest +quick +quiz +quota +race +rachel +raja +ranger +region +remark +rent +reward +rhino +ribbon +rider +road +rodent +round +rubber +ruby +rufus +sabine +saddle +sailor +saint +salt +scale +scuba +season +secure +shake +shallow +shannon +shave +shelf +sherman +shine +shirt +side +sinatra +sincere +size +slalom +slow +small +snow +sofia +song +sound +south +speech +spell +spend +spoon +stage +stamp +stand +state +stella +stick +sting +stock +store +sunday +sunset +support +supreme +sweden +swing +tape +tavern +think +thomas +tictac +time +toast +tobacco +tonight +torch +torso +touch +toyota +trade +tribune +trinity +triton +truck +trust +type +under +unit +urban +urgent +user +value +vendor +venice +verona +vibrate +virgo +visible +vista +vital +voice +vortex +waiter +watch +wave +weather +wedding +wheel +whiskey +wisdom +android +annex +armani +cake +confide +deal +define +dispute +genuine +idiom +impress +include +ironic +null +nurse +obscure +prefer +prodigy +ego +fax +jet +job +rio +ski +yes