# CloakCatcher v1.4.1 # Made by user333_ print(r""" ___ _ _ ___ _ _ / __\ | ___ __ _| | __ / __\__ _| |_ ___| |__ ___ _ __ / / | |/ _ \ / _` | |/ // / / _` | __/ __| '_ \ / _ \ '__| / /___| | (_) | (_| | None: CloakCatcher.main() class CloakCatcher: def main() -> None: try: if ADDRESS == "all" and PORT == "all": # Full serverlist scan mode. CloakCatcher.full_serverlist() else: # Single-server scan mode. CloakCatcher.single_server() except KeyboardInterrupt: print("Exiting...") exit(0) def single_server() -> None: while True: hashed_passwd = hash_data(PASSWD) session_token = fetch_data(url + login_url, { "username": USERNAME, "password": hashed_passwd }, "post")["session_token"] players_on_cv4 = fetch_data(url + players_url, { "token": session_token, "server_address": ADDRESS, "server_port": PORT }, "post")["players"] if len(players_on_cv4) > 0: print("\nPlayers detected on CloakV4:\n") for n in range(0, len(players_on_cv4)): print(f"Playername: \"{players_on_cv4[n]['joined_name']}\", CloakV4 username: \"{players_on_cv4[n]['username']}\"") else: print("No players detected on CloakV4.") input("\nPress Enter to refresh.\nPress [Ctrl + C] to exit.\n") print(f"{'*'*80}\n") # Nicer-looking in code than typing 80 asteriks, but slightly less readable def full_serverlist() -> None: while True: servers = fetch_data(SERVLIST, {}, "get")["list"] count = 0 skipped = 0 for server in servers: if server["clients"] > 0: count += 1 hashed_passwd = hash_data(PASSWD) session_token = fetch_data(url + login_url, { "username": USERNAME, "password": hashed_passwd }, "post")["session_token"] players_on_cv4 = fetch_data(url + players_url, { "token": session_token, "server_address": server["address"], "server_port": str(server["port"]) }, "post")["players"] stdout.write("\r[" + "|/-\\"[count % 4] + f"] Scanned {count}/{len(servers)} servers. Skipped {skipped} servers.") # Why does python care if i have a backslash in an f-string... if len(players_on_cv4) > 0: for n in range(0, len(players_on_cv4)): print("\n\nPlayers detected on CloakV4:") print(f"Server: \"{server['name']}\" ({server['address']}:{server['port']})") print(f"Playername: \"{players_on_cv4[n]['joined_name']}\", CloakV4 username: \"{players_on_cv4[n]['username']}\"\n") else: skipped += 1 stdout.write("\r[" + "|/-\\"[count % 4] + f"] Scanned {count}/{len(servers)} servers. Skipped {skipped} servers.") # See line #63, comment. input("\n\nPress Enter to refresh.\nPress [Ctrl + C] to exit.\n") print(f"{'*'*80}\n") if __name__ == "__main__": main()