├── version.txt ├── start.bat ├── .github └── FUNDING.yml ├── .gitignore ├── modules ├── __pycache__ │ └── __init__.cpython-310.pyc ├── __init__.py ├── osint_tool.py ├── tool_info.py ├── webcopier_tool.py ├── linkvertise_bypasser.py ├── whois_lookup.py ├── discord_server_info.py ├── discord_token_info.py ├── number_info.py ├── username_tracker.py └── ip_lookup.py ├── requirements.txt ├── README.md ├── LICENSE ├── setup.bat └── main.py /version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /start.bat: -------------------------------------------------------------------------------- 1 | python main.py 2 | pause -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | buy_me_a_coffee: alextoutcourt72 2 | 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | venv 3 | setup.bat 4 | modules/doxbin_search.py -------------------------------------------------------------------------------- /modules/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/clt-fork/master/modules/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests~=2.32.3 2 | whois~=1.20240129.2 3 | pywebcopy~=7.0.2 4 | uuid~=1.30 5 | 6 | phonenumbers~=8.13.42 7 | geopy~=2.4.1 8 | pystyle~=2.9 9 | beautifulsoup4~=4.12.3 -------------------------------------------------------------------------------- /modules/__init__.py: -------------------------------------------------------------------------------- 1 | from tools import tool_info 2 | from tools import osint_tool 3 | from tools import webcopier_tool 4 | from tools import pc_info 5 | from tools import number_info 6 | from tools import clarityai 7 | from tools import discord_server_info 8 | from tools import discord_token_info 9 | from tools import ip_lookup 10 | from tools import linkvertise_bypasser 11 | from tools import proxy_scrapper 12 | from tools import username_tracker 13 | from tools import whois_lookup -------------------------------------------------------------------------------- /modules/osint_tool.py: -------------------------------------------------------------------------------- 1 | import webbrowser 2 | import os 3 | 4 | from pystyle import Colors, Colorate 5 | 6 | os.system('cls' if os.name == 'nt' else 'clear') 7 | 8 | 9 | print(Colorate.Horizontal(Colors.red_to_blue,""" 10 | ▒█████ ██████ ██▓ ███▄ █ ▄▄▄█████▓ 11 | ▒██▒ ██▒▒██ ▒ ▓██▒ ██ ▀█ █ ▓ ██▒ ▓▒ 12 | ▒██░ ██▒░ ▓██▄ ▒██▒▓██ ▀█ ██▒▒ ▓██░ ▒░ 13 | ▒██ ██░ ▒ ██▒░██░▓██▒ ▐▌██▒░ ▓██▓ ░ 14 | ░ ████▓▒░▒██████▒▒░██░▒██░ ▓██░ ▒██▒ ░ 15 | ░ ▒░▒░▒░ ▒ ▒▓▒ ▒ ░░▓ ░ ▒░ ▒ ▒ ▒ ░░ 16 | ░ ▒ ▒░ ░ ░▒ ░ ░ ▒ ░░ ░░ ░ ▒░ ░ 17 | ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ ░ ░ 18 | ░ ░ ░ ░ ░ 19 | 20 | """)) 21 | 22 | url = "https://osintframework.com/" 23 | 24 | webbrowser.open(url) 25 | 26 | print(Colorate.Horizontal(Colors.blue_to_purple, """ 27 | [1] Back to menu 28 | """)) 29 | 30 | choice = int(input('\033[0;35m Choose >> ')) 31 | 32 | def execute_script(choice): 33 | if choice == 1: 34 | os.system('python main.py') 35 | 36 | execute_script(choice) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Clarity Tools 3 | 4 | Clarity is a multi tool for OSINT ip lookup web poage copier and more 5 | 6 | [!] Clarity ne vous demandera jamais vos informations personelles 7 | 8 | [>] Join Official discord server > https://discord.gg/qFJ7dNZ5Sf 9 | 10 | ## Features 11 | 12 | - [x] OSINT 13 | - [x] Discord token info 14 | - [x] Whois lookup 15 | - [x] Ip lookup 16 | - [ ] Ip port scanner 17 | - [x] Phone number info 18 | - [ ] Web page copier 19 | - [ ] ClarityAI 20 | - [x] Username tracker 21 | - [x] discord server info 22 | - [ ] Video crasher 23 | - [ ] discord autologin 24 | - [ ] self bot 25 | - [ ] Grabber 26 | - [ ] Cybersecurity 27 | 28 | ## Deployment 29 | 30 | To deploy this project run 31 | 32 | ```bash 33 | run setup.bat 34 | ``` 35 | 36 | ## Important 37 | Je ne suis pas tenu pour responsable des degats causé a la perssone que vous visez avec cet outils 38 | 39 | Clarity Tool n'est pas affilié a Clarity-Corp 40 | 41 | ## Copyright 42 | © "Clarity Tool" is a service and product provided by trademark HEXOFO™ 2024-2034. 43 | 44 | All rights reserved // www.hexofo.org 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | © Clarity is a product and service from TradeMark HEXOFO registered at the European Union Intellectual Property Office since 2024. All rights reserved 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /modules/tool_info.py: -------------------------------------------------------------------------------- 1 | import os 2 | from pystyle import Colors, Colorate, Center 3 | 4 | author = "Alex" 5 | version = "1.0" 6 | 7 | os.system('cls' if os.name == 'nt' else 'clear') 8 | class toolinfo: 9 | print(Colorate.Horizontal(Colors.blue_to_purple,""" 10 | ▄▄▄█████▓ ▒█████ ▒█████ ██▓ ██▓ ███▄ █ █████▒▒█████ 11 | ▓ ██▒ ▓▒▒██▒ ██▒▒██▒ ██▒▓██▒ ▓██▒ ██ ▀█ █ ▓██ ▒▒██▒ ██▒ 12 | ▒ ▓██░ ▒░▒██░ ██▒▒██░ ██▒▒██░ ▒██▒▓██ ▀█ ██▒▒████ ░▒██░ ██▒ 13 | ░ ▓██▓ ░ ▒██ ██░▒██ ██░▒██░ ░██░▓██▒ ▐▌██▒░▓█▒ ░▒██ ██░ 14 | ▒██▒ ░ ░ ████▓▒░░ ████▓▒░░██████▒ ░██░▒██░ ▓██░░▒█░ ░ ████▓▒░ 15 | ▒ ░░ ░ ▒░▒░▒░ ░ ▒░▒░▒░ ░ ▒░▓ ░ ░▓ ░ ▒░ ▒ ▒ ▒ ░ ░ ▒░▒░▒░ 16 | ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ░ ▒ ░ ▒ ░░ ░░ ░ ▒░ ░ ░ ▒ ▒░ 17 | ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ 18 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 19 | """)) 20 | 21 | print(Colorate.Horizontal(Colors.blue_to_purple,""" 22 | 23 | Author: {author} 24 | Version: {version} 25 | 26 | 27 | [1] Back to main menu 28 | """)) 29 | 30 | choice = int(input('Choose >> ')) 31 | 32 | def execute_script(choice): 33 | if choice == 1: 34 | os.system('python ./main.py') 35 | 36 | execute_script(choice) 37 | 38 | if __name__ == '__main__': 39 | toolinfo() -------------------------------------------------------------------------------- /modules/webcopier_tool.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from pywebcopy import save_website 4 | 5 | os.system('cls' if os.name == 'nt' else 'clear') 6 | os.system("color d") 7 | 8 | print(f""" 9 | █ █░▓█████ ▄▄▄▄ ██▓███ ▄▄▄ ▄████ ▓█████ ██████ ▄▄▄ ██▒ █▓▓█████ ██▀███ 10 | ▓█░ █ ░█░▓█ ▀ ▓█████▄ ▓██░ ██▒▒████▄ ██▒ ▀█▒▓█ ▀ ▒██ ▒ ▒████▄ ▓██░ █▒▓█ ▀ ▓██ ▒ ██▒ 11 | ▒█░ █ ░█ ▒███ ▒██▒ ▄██ ▓██░ ██▓▒▒██ ▀█▄ ▒██░▄▄▄░▒███ ░ ▓██▄ ▒██ ▀█▄▓██ █▒░▒███ ▓██ ░▄█ ▒ 12 | ░█░ █ ░█ ▒▓█ ▄ ▒██░█▀ ▒██▄█▓▒ ▒░██▄▄▄▄██ ░▓█ ██▓▒▓█ ▄ ▒ ██▒░██▄▄▄▄██▒██ █░░▒▓█ ▄ ▒██▀▀█▄ 13 | ░░██▒██▓ ░▒████▒░▓█ ▀█▓ ▒██▒ ░ ░ ▓█ ▓██▒░▒▓███▀▒░▒████▒ ▒██████▒▒ ▓█ ▓██▒▒▀█░ ░▒████▒░██▓ ▒██▒ 14 | ░ ▓░▒ ▒ ░░ ▒░ ░░▒▓███▀▒ ▒▓▒░ ░ ░ ▒▒ ▓▒█░ ░▒ ▒ ░░ ▒░ ░ ▒ ▒▓▒ ▒ ░ ▒▒ ▓▒█░░ ▐░ ░░ ▒░ ░░ ▒▓ ░▒▓░ 15 | ▒ ░ ░ ░ ░ ░▒░▒ ░ ░▒ ░ ▒ ▒▒ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ░ ▒ ▒▒ ░░ ░░ ░ ░ ░ ░▒ ░ ▒░ 16 | ░ ░ ░ ░ ░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░░ ░ ░░ ░ 17 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 18 | ░ ░ 19 | """) 20 | 21 | url = input("Enter the webpage url >> ") 22 | 23 | 24 | save_website( 25 | url=url, 26 | project_folder="./savedpages", 27 | project_name="my_site", 28 | bypass_robots=True, 29 | debug=True, 30 | open_in_browser=True, 31 | delay=None, 32 | threaded=False, 33 | ) -------------------------------------------------------------------------------- /modules/linkvertise_bypasser.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | 4 | os.system("color d") 5 | 6 | print(f""" 7 | ██▓ ██▓ ███▄ █ ██ ▄█▀██▒ █▓▓█████ ██▀███ ▄▄▄█████▓ ██▓ ██████ ▓█████ 8 | ▓██▒ ▓██▒ ██ ▀█ █ ██▄█▒▓██░ █▒▓█ ▀ ▓██ ▒ ██▒▓ ██▒ ▓▒▓██▒▒██ ▒ ▓█ ▀ 9 | ▒██░ ▒██▒▓██ ▀█ ██▒▓███▄░ ▓██ █▒░▒███ ▓██ ░▄█ ▒▒ ▓██░ ▒░▒██▒░ ▓██▄ ▒███ 10 | ▒██░ ░██░▓██▒ ▐▌██▒▓██ █▄ ▒██ █░░▒▓█ ▄ ▒██▀▀█▄ ░ ▓██▓ ░ ░██░ ▒ ██▒▒▓█ ▄ 11 | ░██████▒░██░▒██░ ▓██░▒██▒ █▄ ▒▀█░ ░▒████▒░██▓ ▒██▒ ▒██▒ ░ ░██░▒██████▒▒░▒████▒ 12 | ░ ▒░▓ ░░▓ ░ ▒░ ▒ ▒ ▒ ▒▒ ▓▒ ░ ▐░ ░░ ▒░ ░░ ▒▓ ░▒▓░ ▒ ░░ ░▓ ▒ ▒▓▒ ▒ ░░░ ▒░ ░ 13 | ░ ░ ▒ ░ ▒ ░░ ░░ ░ ▒░░ ░▒ ▒░ ░ ░░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ░░ ░▒ ░ ░ ░ ░ ░ 14 | ░ ░ ▒ ░ ░ ░ ░ ░ ░░ ░ ░░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ 15 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 16 | ░ 17 | ▄▄▄▄ ▓██ ██▓ ██▓███ ▄▄▄ ██████ ██████ ▓█████ ██▀███ 18 | ▓█████▄▒██ ██▒▓██░ ██▒▒████▄ ▒██ ▒ ▒██ ▒ ▓█ ▀ ▓██ ▒ ██▒ 19 | ▒██▒ ▄██▒██ ██░▓██░ ██▓▒▒██ ▀█▄ ░ ▓██▄ ░ ▓██▄ ▒███ ▓██ ░▄█ ▒ 20 | ▒██░█▀ ░ ▐██▓░▒██▄█▓▒ ▒░██▄▄▄▄██ ▒ ██▒ ▒ ██▒▒▓█ ▄ ▒██▀▀█▄ 21 | ░▓█ ▀█▓░ ██▒▓░▒██▒ ░ ░ ▓█ ▓██▒▒██████▒▒▒██████▒▒░▒████▒░██▓ ▒██▒ 22 | ░▒▓███▀▒ ██▒▒▒ ▒▓▒░ ░ ░ ▒▒ ▓▒█░▒ ▒▓▒ ▒ ░▒ ▒▓▒ ▒ ░░░ ▒░ ░░ ▒▓ ░▒▓░ 23 | ▒░▒ ░▓██ ░▒░ ░▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░░ ░▒ ░ ░ ░ ░ ░ ░▒ ░ ▒░ 24 | ░ ░▒ ▒ ░░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░░ ░ 25 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 26 | ░░ ░ 27 | """) 28 | 29 | 30 | -------------------------------------------------------------------------------- /setup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo checking python installation... 3 | echo. 4 | 5 | :: python version 6 | set python_version=3.11.5 7 | 8 | ::check system architecture 9 | if "%PROCESSOR_ARCHITECTURE%"=="x86" ( 10 | echo 32-bit system detected. 11 | ) else ( 12 | echo 64-bit system detected. 13 | ) 14 | 15 | :: if architecture is 32-bit, install python 3.11.4 x86 16 | if "%PROCESSOR_ARCHITECTURE%"=="x86" ( 17 | echo 32-bit system detected. 18 | ::install python 3.11.4 x86 19 | powershell -Command "Invoke-WebRequest https://www.python.org/ftp/python/%python_version%/python-%python_version%-amd64.exe -OutFile python-%python_version%-amd64.exe" 20 | python-%python_version%-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 21 | where python >nul 2>nul 22 | if %errorlevel% neq 0 ( 23 | echo python installation failed. 24 | echo. 25 | pause 26 | exit 27 | ) 28 | ) else ( 29 | ::install python 3.11.4 x64 30 | powershell -Command "Invoke-WebRequest https://www.python.org/ftp/python/%python_version%/python-%python_version%-amd64.exe -OutFile python-%python_version%-amd64.exe" 31 | python-%python_version%-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 32 | where python >nul 2>nul 33 | if %errorlevel% neq 0 ( 34 | echo python installation failed. 35 | echo. 36 | pause 37 | exit 38 | ) 39 | ) 40 | 41 | ::check pip installation 42 | where pip >nul 2>nul 43 | if %errorlevel% neq 0 ( 44 | echo pip is not installed. 45 | echo. 46 | pause 47 | exit 48 | ) 49 | 50 | :: when python is installed delete the python installation file 51 | del python-%python_version%-amd64.exe 52 | 53 | :: if is not installed, install pip 54 | powershell -Command "Invoke-WebRequest https://bootstrap.pypa.io/get-pip.py -OutFile get-pip.py" 55 | python get-pip.py 56 | del get-pip.py 57 | 58 | ::check pip version 59 | pip --version 60 | 61 | ::if pip is not up to date, update pip 62 | pip install --upgrade pip 63 | 64 | :: install python packages 65 | pip install -r requirements.txt 66 | 67 | python main.py -------------------------------------------------------------------------------- /modules/whois_lookup.py: -------------------------------------------------------------------------------- 1 | import os 2 | import whois 3 | 4 | os.system('cls' if os.name == 'nt' else 'clear') 5 | os.system("color d") 6 | 7 | print(f""" 8 | █ █░ ██░ ██ ▒█████ ██▓ ██████ ██▓ ▒█████ ▒█████ ██ ▄█▀ █ ██ ██▓███ 9 | ▓█░ █ ░█░▓██░ ██▒▒██▒ ██▒▓██▒▒██ ▒ ▓██▒ ▒██▒ ██▒▒██▒ ██▒ ██▄█▒ ██ ▓██▒▓██░ ██▒ 10 | ▒█░ █ ░█ ▒██▀▀██░▒██░ ██▒▒██▒░ ▓██▄ ▒██░ ▒██░ ██▒▒██░ ██▒▓███▄░ ▓██ ▒██░▓██░ ██▓▒ 11 | ░█░ █ ░█ ░▓█ ░██ ▒██ ██░░██░ ▒ ██▒ ▒██░ ▒██ ██░▒██ ██░▓██ █▄ ▓▓█ ░██░▒██▄█▓▒ ▒ 12 | ░░██▒██▓ ░▓█▒░██▓░ ████▓▒░░██░▒██████▒▒ ░██████▒░ ████▓▒░░ ████▓▒░▒██▒ █▄▒▒█████▓ ▒██▒ ░ ░ 13 | ░ ▓░▒ ▒ ▒ ░░▒░▒░ ▒░▒░▒░ ░▓ ▒ ▒▓▒ ▒ ░ ░ ▒░▓ ░░ ▒░▒░▒░ ░ ▒░▒░▒░ ▒ ▒▒ ▓▒░▒▓▒ ▒ ▒ ▒▓▒░ ░ ░ 14 | ▒ ░ ░ ▒ ░▒░ ░ ░ ▒ ▒░ ▒ ░░ ░▒ ░ ░ ░ ░ ▒ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ░▒ ▒░░░▒░ ░ ░ ░▒ ░ 15 | ░ ░ ░ ░░ ░░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░░ ░ ░░░ ░ ░ ░░ 16 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 17 | 18 | """) 19 | 20 | domain = input("Enter a domain name >>> ") 21 | 22 | domain_name = domain 23 | 24 | def is_registered(domain_name): 25 | try: 26 | w = whois.whois(domain_name) 27 | except Exception: 28 | return False 29 | else: 30 | return bool(w.domain_name) 31 | # iterate over domains 32 | for domain in domains: 33 | print(f"{domain} is {'registered' if is_registered(domain) else 'not registered'}") 34 | 35 | if is_registered(domain_name): 36 | whois_info = whois.whois(domain_name) 37 | # print the registrar 38 | print("Domain registrar:", whois_info.registrar) 39 | # print the WHOIS server 40 | print("WHOIS server:", whois_info.whois_server) 41 | # get the creation time 42 | print("Domain creation date:", whois_info.creation_date) 43 | # get expiration date 44 | print("Expiration date:", whois_info.expiration_date) 45 | # print all other info 46 | print(whois_info) 47 | 48 | print(f""" 49 | [1] Back to menu 50 | [2] Whois lookup 51 | """) 52 | 53 | choice = int(input('\033[0;35m Choose >> ')) 54 | 55 | def execute_script(choice): 56 | if choice == 1: 57 | os.system('python main.py') 58 | elif choice == 2: 59 | os.system('python whois_lookup.py') 60 | 61 | execute_script(choice) 62 | -------------------------------------------------------------------------------- /modules/discord_server_info.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | from pystyle import Colors, Colorate, Center 4 | 5 | os.system('cls' if os.name == 'nt' else 'clear') 6 | os.system("color d") 7 | 8 | 9 | print(Colorate.Horizontal(Colors.blue_to_purple,""" 10 | ██████ ▓█████ ██▀███ ██▒ █▓▓█████ ██▀███ ██▓ ███▄ █ █████▒▒█████ 11 | ▒██ ▒ ▓█ ▀ ▓██ ▒ ██▒▓██░ █▒▓█ ▀ ▓██ ▒ ██▒ ▓██▒ ██ ▀█ █ ▓██ ▒▒██▒ ██▒ 12 | ░ ▓██▄ ▒███ ▓██ ░▄█ ▒ ▓██ █▒░▒███ ▓██ ░▄█ ▒ ▒██▒▓██ ▀█ ██▒▒████ ░▒██░ ██▒ 13 | ▒ ██▒▒▓█ ▄ ▒██▀▀█▄ ▒██ █░░▒▓█ ▄ ▒██▀▀█▄ ░██░▓██▒ ▐▌██▒░▓█▒ ░▒██ ██░ 14 | ▒██████▒▒░▒████▒░██▓ ▒██▒ ▒▀█░ ░▒████▒░██▓ ▒██▒ ░██░▒██░ ▓██░░▒█░ ░ ████▓▒░ 15 | ▒ ▒▓▒ ▒ ░░░ ▒░ ░░ ▒▓ ░▒▓░ ░ ▐░ ░░ ▒░ ░░ ▒▓ ░▒▓░ ░▓ ░ ▒░ ▒ ▒ ▒ ░ ░ ▒░▒░▒░ 16 | ░ ░▒ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ░░ ░ ░ ░ ░▒ ░ ▒░ ▒ ░░ ░░ ░ ▒░ ░ ░ ▒ ▒░ 17 | ░ ░ ░ ░ ░░ ░ ░░ ░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ 18 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 19 | ░ 20 | """)) 21 | def clear(): 22 | os.system('cls' if os.name == 'nt' else 'clear') 23 | 24 | 25 | def print_error(message): 26 | print(f"Error: {message}") 27 | 28 | 29 | def server_lookup(): 30 | invitelink = input(Colorate.Horizontal(Colors.blue_to_purple,f"Insert end part of link of discord server link: ")).strip() 31 | 32 | try: 33 | if "discord.gg" in invitelink: 34 | code = invitelink.split('/')[-1] 35 | else: 36 | code = invitelink 37 | 38 | res = requests.get(f"https://discord.com/api/v9/invites/{code}") 39 | 40 | if res.status_code == 200: 41 | res_json = res.json() 42 | 43 | print(f"Invitation Information:") 44 | print(f"Invite Link: https://discord.gg/{res_json['code']}") 45 | print(f"Channel: {res_json['channel']['name']} ({res_json['channel']['id']})") 46 | print(f"Expiration Date: {res_json['expires_at']}\n") 47 | 48 | print(f"Inviter Information:") 49 | print(f"Username: {res_json['inviter']['username']}#{res_json['inviter']['discriminator']}") 50 | print(f"User ID: {res_json['inviter']['id']}\n") 51 | 52 | print(f"Server Information:") 53 | print(f"Name: {res_json['guild']['name']}") 54 | print(f"Server ID: {res_json['guild']['id']}") 55 | print(f"Banner: {res_json['guild']['banner']}") 56 | print(f"Description: {res_json['guild']['description']}") 57 | print(f"Custom Invite Link: {res_json['guild']['vanity_url_code']}") 58 | print(f"Verification Level: {res_json['guild']['verification_level']}") 59 | print(f"Splash: {res_json['guild']['splash']}") 60 | print(f"Features: {', '.join(res_json['guild']['features'])}") 61 | else: 62 | print_error(f"An error occurred while sending request (Status Code: {res.status_code})") 63 | 64 | except Exception as e: 65 | print_error(f"Error: {e}") 66 | 67 | 68 | def main(): 69 | 70 | while True: 71 | server_lookup() 72 | return end() 73 | 74 | def end(): 75 | print(Colorate.Horizontal(Colors.blue_to_purple,f""" 76 | [1] Back to menu 77 | """)) 78 | 79 | choice = int(input(Colorate.Horizontal(Colors.blue_to_purple,'\033[0;35m Choose >> '))) 80 | 81 | def execute_script(choice): 82 | if choice == 1: 83 | os.system('python main.py') 84 | 85 | if __name__ == "__main__": 86 | main() -------------------------------------------------------------------------------- /modules/discord_token_info.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | 4 | os.system('color D') 5 | os.system('cls' if os.name == 'nt' else 'clear') 6 | 7 | print(f""" 8 | ▄▄▄█████▓ ▒█████ ██ ▄█▀▓█████ ███▄ █ ██▓ ███▄ █ █████▒▒█████ 9 | ▓ ██▒ ▓▒▒██▒ ██▒ ██▄█▒ ▓█ ▀ ██ ▀█ █ ▓██▒ ██ ▀█ █ ▓██ ▒▒██▒ ██▒ 10 | ▒ ▓██░ ▒░▒██░ ██▒▓███▄░ ▒███ ▓██ ▀█ ██▒ ▒██▒▓██ ▀█ ██▒▒████ ░▒██░ ██▒ 11 | ░ ▓██▓ ░ ▒██ ██░▓██ █▄ ▒▓█ ▄ ▓██▒ ▐▌██▒ ░██░▓██▒ ▐▌██▒░▓█▒ ░▒██ ██░ 12 | ▒██▒ ░ ░ ████▓▒░▒██▒ █▄░▒████▒▒██░ ▓██░ ░██░▒██░ ▓██░░▒█░ ░ ████▓▒░ 13 | ▒ ░░ ░ ▒░▒░▒░ ▒ ▒▒ ▓▒░░ ▒░ ░░ ▒░ ▒ ▒ ░▓ ░ ▒░ ▒ ▒ ▒ ░ ░ ▒░▒░▒░ 14 | ░ ░ ▒ ▒░ ░ ░▒ ▒░ ░ ░ ░░ ░░ ░ ▒░ ▒ ░░ ░░ ░ ▒░ ░ ░ ▒ ▒░ 15 | ░ ░ ░ ░ ▒ ░ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ 16 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 17 | 18 | """) 19 | 20 | def get_user_info(token): 21 | url = "https://discord.com/api/v9/users/@me" 22 | headers = { 23 | "Authorization": f"Bearer {token}", 24 | "Content-Type": "application/json" 25 | } 26 | 27 | response = requests.get(url, headers=headers) 28 | 29 | if response.status_code == 200: 30 | user_info = response.json() 31 | return { 32 | "email": user_info.get("email"), 33 | "phone": user_info.get("phone"), 34 | "username": f"{user_info.get('username')}#{user_info.get('discriminator')}", 35 | "display_name": user_info.get("global_name"), 36 | "user_id": user_info.get("id") 37 | } 38 | else: 39 | return {"error": "Unable to fetch user info", "status_code": response.status_code} 40 | 41 | def main(): 42 | token = input("Please enter your Discord token: ") 43 | 44 | user_info = get_user_info(token) 45 | 46 | if "error" in user_info: 47 | print(f"Error: {user_info['error']} (Status code: {user_info['status_code']})") 48 | if user_info['status_code'] == 401: 49 | print("Invalid token. Please check your token and try again.") 50 | return end() 51 | else: 52 | print("Token is valid.") 53 | print(f"Email: {user_info['email']}") 54 | print(f"Phone: {user_info['phone']}") 55 | print(f"Username: {user_info['username']}") 56 | print(f"Display Name: {user_info['display_name']}") 57 | print(f"User ID: {user_info['user_id']}") 58 | 59 | nitro_status = get_nitro_status(token) 60 | if isinstance(nitro_status, dict) and "error" in nitro_status: 61 | print(f"Error: {nitro_status['error']} (Status code: {nitro_status['status_code']})") 62 | else: 63 | print(f"Nitro Status: {nitro_status}") 64 | def end(): 65 | print(f""" 66 | [1] back to menu 67 | """) 68 | 69 | choice = int(input('\033[0;35m Choose >> ')) 70 | 71 | def execute_script(choice): 72 | if choice == 1: 73 | os.system('python main.py') 74 | 75 | execute_script(choice) 76 | 77 | def get_nitro_status(token): 78 | url = "https://discord.com/api/v9/users/@me/billing/subscriptions" 79 | headers = { 80 | "Authorization": f"Bearer {token}", 81 | "Content-Type": "application/json" 82 | } 83 | 84 | response = requests.get(url, headers=headers) 85 | 86 | if response.status_code != 200: 87 | return {"error": "Unable to fetch Nitro status", "status_code": response.status_code} 88 | 89 | subscriptions = response.json() 90 | 91 | if not subscriptions: 92 | return "No Nitro subscription" 93 | 94 | nitro_types = {1: "Nitro Classic", 2: "Nitro"} 95 | for subscription in subscriptions: 96 | nitro_status = nitro_types.get(subscription['type']) 97 | if nitro_status: 98 | return nitro_status 99 | 100 | return "No Nitro subscription" 101 | 102 | if __name__ == "__main__": 103 | main() 104 | -------------------------------------------------------------------------------- /modules/number_info.py: -------------------------------------------------------------------------------- 1 | import os 2 | import phonenumbers 3 | from phonenumbers import geocoder, carrier, timezone, is_valid_number, number_type 4 | from pystyle import Colors, Colorate, Center 5 | 6 | os.system('color D') 7 | os.system("cls") 8 | 9 | print(Colorate.Horizontal(Colors.blue_to_purple,f""" 10 | 11 | 12 | ███▄ █ █ ██ ███▄ ▄███▓ ▄▄▄▄ ▓█████ ██▀███ ██▓ ███▄ █ █████▒▒█████ 13 | ██ ▀█ █ ██ ▓██▒▓██▒▀█▀ ██▒▓█████▄ ▓█ ▀ ▓██ ▒ ██▒ ▓██▒ ██ ▀█ █ ▓██ ▒▒██▒ ██▒ 14 | ▓██ ▀█ ██▒▓██ ▒██░▓██ ▓██░▒██▒ ▄██▒███ ▓██ ░▄█ ▒ ▒██▒▓██ ▀█ ██▒▒████ ░▒██░ ██▒ 15 | ▓██▒ ▐▌██▒▓▓█ ░██░▒██ ▒██ ▒██░█▀ ▒▓█ ▄ ▒██▀▀█▄ ░██░▓██▒ ▐▌██▒░▓█▒ ░▒██ ██░ 16 | ▒██░ ▓██░▒▒█████▓ ▒██▒ ░██▒░▓█ ▀█▓░▒████▒░██▓ ▒██▒ ░██░▒██░ ▓██░░▒█░ ░ ████▓▒░ 17 | ░ ▒░ ▒ ▒ ░▒▓▒ ▒ ▒ ░ ▒░ ░ ░░▒▓███▀▒░░ ▒░ ░░ ▒▓ ░▒▓░ ░▓ ░ ▒░ ▒ ▒ ▒ ░ ░ ▒░▒░▒░ 18 | ░ ░░ ░ ▒░░░▒░ ░ ░ ░ ░ ░▒░▒ ░ ░ ░ ░ ░▒ ░ ▒░ ▒ ░░ ░░ ░ ▒░ ░ ░ ▒ ▒░ 19 | ░ ░ ░ ░░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ 20 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 21 | ░ 22 | ░ 23 | 24 | """)) 25 | 26 | def get_phone_info(phone_number): 27 | try: 28 | parsed_number = phonenumbers.parse(phone_number) 29 | 30 | valid = is_valid_number(parsed_number) 31 | 32 | if not valid: 33 | return {"error": "Le numéro de téléphone n'est pas valide."} 34 | 35 | location = geocoder.description_for_number(parsed_number, "fr") 36 | 37 | operator = carrier.name_for_number(parsed_number, "fr") 38 | 39 | line_type = number_type(parsed_number) 40 | 41 | timezones = timezone.time_zones_for_number(parsed_number) 42 | 43 | country_code = parsed_number.country_code 44 | national_number = parsed_number.national_number 45 | region_code = phonenumbers.region_code_for_number(parsed_number) 46 | 47 | line_type_dict = { 48 | phonenumbers.PhoneNumberType.MOBILE: "Mobile", 49 | phonenumbers.PhoneNumberType.FIXED_LINE: "Ligne fixe", 50 | phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE: "Ligne fixe ou mobile", 51 | phonenumbers.PhoneNumberType.TOLL_FREE: "Numéro gratuit", 52 | phonenumbers.PhoneNumberType.PREMIUM_RATE: "Numéro surtaxé", 53 | phonenumbers.PhoneNumberType.SHARED_COST: "Numéro à coût partagé", 54 | phonenumbers.PhoneNumberType.VOIP: "VoIP", 55 | phonenumbers.PhoneNumberType.PERSONAL_NUMBER: "Numéro personnel", 56 | phonenumbers.PhoneNumberType.PAGER: "Pager", 57 | phonenumbers.PhoneNumberType.UAN: "Numéro universel", 58 | phonenumbers.PhoneNumberType.VOICEMAIL: "Messagerie vocale" 59 | } 60 | 61 | return { 62 | "valid": valid, 63 | "location": location, 64 | "operator": operator, 65 | "line_type": line_type_dict.get(line_type, "Inconnu"), 66 | "timezones": timezones, 67 | "country_code": country_code, 68 | "national_number": national_number, 69 | "region_code": region_code 70 | } 71 | except phonenumbers.NumberParseException: 72 | return {"error": "Erreur lors de l'analyse du numéro."} 73 | except Exception as e: 74 | return {"error": f"Une erreur inattendue est survenue : {e}"} 75 | 76 | phone_number = input("Entrez le numéro de téléphone de votre cible (avec l'indicatif pays, ex: +33612345678) : ") 77 | 78 | info = get_phone_info(phone_number) 79 | 80 | if "error" in info: 81 | print(info["error"]) 82 | else: 83 | print(f"Numéro valide : {info['valid']}") 84 | print(f"Localisation : {info['location']}") 85 | print(f"Opérateur : {info['operator']}") 86 | print(f"Type de ligne : {info['line_type']}") 87 | print(f"Fuseaux horaires : {', '.join(info['timezones'])}") 88 | print(f"Code pays : {info['country_code']}") 89 | print(f"Numéro national : {info['national_number']}") 90 | print(f"Code régional : {info['region_code']}") 91 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import os 2 | from os import system 3 | 4 | import requests 5 | from pystyle import Colors, Colorate, Center 6 | 7 | def update_checker(): 8 | try: 9 | response = requests.get("https://api.github.com/repos/Al3xUI/clarity-tool/releases/latest") 10 | data = response.json() 11 | latest_version = data["tag_name"] 12 | current_version = open("version.txt", "r").read() 13 | if latest_version != current_version: 14 | print(f"A new version of Clarity tool is available: {latest_version}") 15 | print("Do you want to update now? (y/n)") 16 | choice = input() 17 | if choice.lower() == "y": 18 | os.system("git clone https://github.com/Al3xUI/clarity-tool.git") 19 | os.system("cd clarity-tool") 20 | os.system("setup.bat") 21 | os.system("python main.py") 22 | else: 23 | print("Update cancelled.") 24 | else: 25 | print("You are using the latest version of Clarity tool.") 26 | except: 27 | print("Failed to check for updates.") 28 | 29 | title = "Clarity tool \ made by alex \ v1.0" 30 | system("title " + title) 31 | 32 | os.system('cls' if os.name == 'nt' else 'clear') 33 | 34 | menu = """ 35 | ▄████▄ ██▓ ▄▄▄ ██▀███ ██▓▄▄▄█████▓▓██ ██▓ ▄▄▄█████▓ ▒█████ ▒█████ ██▓ 36 | ▒██▀ ▀█ ▓██▒ ▒████▄ ▓██ ▒ ██▒▓██▒▓ ██▒ ▓▒ ▒██ ██▒ ▓ ██▒ ▓▒▒██▒ ██▒▒██▒ ██▒▓██▒ 37 | ▒▓█ ▄ ▒██░ ▒██ ▀█▄ ▓██ ░▄█ ▒▒██▒▒ ▓██░ ▒░ ▒██ ██░ ▒ ▓██░ ▒░▒██░ ██▒▒██░ ██▒▒██░ 38 | ▒▓▓▄ ▄██▒▒██░ ░██▄▄▄▄██ ▒██▀▀█▄ ░██░░ ▓██▓ ░ ░ ▐██▓░ ░ ▓██▓ ░ ▒██ ██░▒██ ██░▒██░ 39 | ▒ ▓███▀ ░░██████▒▓█ ▓██▒░██▓ ▒██▒░██░ ▒██▒ ░ ░ ██▒▓░ ▒██▒ ░ ░ ████▓▒░░ ████▓▒░░██████▒ 40 | ░ ░▒ ▒ ░░ ▒░▓ ░▒▒ ▓▒█░░ ▒▓ ░▒▓░░▓ ▒ ░░ ██▒▒▒ ▒ ░░ ░ ▒░▒░▒░ ░ ▒░▒░▒░ ░ ▒░▓ ░ 41 | ░ ▒ ░ ░ ▒ ░ ▒ ▒▒ ░ ░▒ ░ ▒░ ▒ ░ ░ ▓██ ░▒░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ░ ▒ ░ 42 | ░ ░ ░ ░ ▒ ░░ ░ ▒ ░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ 43 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ 44 | ░ ░ ░ 45 | 46 | Made with <3 By Alex ╔═════════════════════════════════════╗ 47 | version 1.0 ║ [!] ║ 48 | ╦ ║ clarity ne vous demendera ║ 49 | ║ ║ jamais vos ainformations perssonels.║ 50 | ║ ╚════════════════╦════════════════════╝ 51 | ╔══════════════════════════╩════════════════════════╗ ║ 52 | ║ ║ ║ 53 | ╔══════════════════════╩════════════════════════╗ ╔════════════════════════╩═════════════╩════════╗ 54 | ║ [1] > Tool info ║ ║ [10] > Linkvertise bypasser ║ 55 | ║ [2] > Ip tools ║ ║ [11] > ClarityAI (in dev) ║ 56 | ║ [3] > N/A ║ ║ [12] > Self Security (in dev) ║ 57 | ║ [4] > OSINT Framework (website) ║ ║ [13] > ║ 58 | ║ [5] > Check Phone Number ║ ║ [14] > ║ 59 | ║ [6] > PC Info ║ ║ [15] > ║ 60 | ║ [7] > Discord token info ║ ║ [16] > ║ 61 | ║ [8] > Username Tracker ║ ║ [17] > ║ 62 | ║ [9] > Discord server info ║ ║ [18] > ║ 63 | ╚═══════════════════════════════════════════════╝ ╚═══════════════════════════════════════════════╝ 64 | """ 65 | print(Colorate.Horizontal(Colors.blue_to_purple, menu)) 66 | 67 | choice = int(input(Colorate.Horizontal(Colors.blue_to_purple, 'Choose >> '))) 68 | 69 | 70 | def execute_script(choice): 71 | if choice == 1: 72 | os.system('python ./modules/tool_info.py') 73 | elif choice == 2: 74 | os.system('python ./modules/ip_lookup.py') 75 | elif choice == 3: 76 | os.system('python ./main.py') 77 | elif choice == 4: 78 | os.system('python ./modules/osint_tool.py') 79 | elif choice == 5: 80 | os.system('python ./modules/number_info.py') 81 | elif choice == 6: 82 | os.system('python ./modules/PC_info.py') 83 | elif choice == 7: 84 | os.system('python ./modules/discord_token_info.py') 85 | elif choice == 8: 86 | os.system('python ./modules/username_tracker.py') 87 | elif choice == 9: 88 | os.system('python ./modules/discord_server_info.py') 89 | 90 | execute_script(choice) 91 | -------------------------------------------------------------------------------- /modules/username_tracker.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | from concurrent.futures import ThreadPoolExecutor, as_completed 4 | 5 | os.system('color D') 6 | os.system('cls' if os.name == 'nt' else 'clear') 7 | 8 | print(f""" 9 | █ ██ ██████ ▓█████ ██▀███ ███▄ █ ▄▄▄ ███▄ ▄███▓▓█████ ▄▄▄█████▓ ██▀███ ▄▄▄ ▄████▄ ██ ▄█▀ 10 | ██ ▓██▒▒██ ▒ ▓█ ▀ ▓██ ▒ ██▒ ██ ▀█ █ ▒████▄ ▓██▒▀█▀ ██▒▓█ ▀ ▓ ██▒ ▓▒▓██ ▒ ██▒▒████▄ ▒██▀ ▀█ ██▄█▒ 11 | ▓██ ▒██░░ ▓██▄ ▒███ ▓██ ░▄█ ▒▓██ ▀█ ██▒▒██ ▀█▄ ▓██ ▓██░▒███ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒██ ▀█▄ ▒▓█ ▄ ▓███▄░ 12 | ▓▓█ ░██░ ▒ ██▒▒▓█ ▄ ▒██▀▀█▄ ▓██▒ ▐▌██▒░██▄▄▄▄██ ▒██ ▒██ ▒▓█ ▄ ░ ▓██▓ ░ ▒██▀▀█▄ ░██▄▄▄▄██ ▒▓▓▄ ▄██▒▓██ █▄ 13 | ▒▒█████▓ ▒██████▒▒░▒████▒░██▓ ▒██▒▒██░ ▓██░ ▓█ ▓██▒▒██▒ ░██▒░▒████▒ ▒██▒ ░ ░██▓ ▒██▒ ▓█ ▓██▒▒ ▓███▀ ░▒██▒ █▄ 14 | ░▒▓▒ ▒ ▒ ▒ ▒▓▒ ▒ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ▒░ ▒ ▒ ▒▒ ▓▒█░░ ▒░ ░ ░░░ ▒░ ░ ▒ ░░ ░ ▒▓ ░▒▓░ ▒▒ ▓▒█░░ ░▒ ▒ ░▒ ▒▒ ▓▒ 15 | ░░▒░ ░ ░ ░ ░▒ ░ ░ ░ ░ ░ ░▒ ░ ▒░░ ░░ ░ ▒░ ▒ ▒▒ ░░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ▒ ▒▒ ░ ░ ▒ ░ ░▒ ▒░ 16 | ░░░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░░ ░ 17 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ 18 | ░ ░ 19 | """) 20 | 21 | 22 | platforms = { 23 | "Twitter": "https://twitter.com/{}", 24 | "Instagram": "https://www.instagram.com/{}", 25 | "Facebook": "https://www.facebook.com/{}", 26 | "Pinterest": "https://www.pinterest.com/{}", 27 | "Tumblr": "https://{}.tumblr.com", 28 | "YouTube": "https://www.youtube.com/{}", 29 | "Vimeo": "https://vimeo.com/{}", 30 | "SoundCloud": "https://soundcloud.com/{}", 31 | "DeviantArt": "https://www.deviantart.com/{}", 32 | "About.me": "https://about.me/{}", 33 | "Flickr": "https://www.flickr.com/people/{}", 34 | "Twitch": "https://www.twitch.tv/{}", 35 | "Steam": "https://steamcommunity.com/id/{}", 36 | "Medium": "https://medium.com/@{}", 37 | "Blogger": "https://{}.blogspot.com", 38 | "Goodreads": "https://www.goodreads.com/{}", 39 | "Keybase": "https://keybase.io/{}", 40 | "VK": "https://vk.com/{}", 41 | "Spotify": "https://open.spotify.com/user/{}", 42 | "TripAdvisor": "https://www.tripadvisor.com/members/{}", 43 | "Last.fm": "https://www.last.fm/user/{}", 44 | "Slideshare": "https://www.slideshare.net/{}", 45 | "Dribbble": "https://dribbble.com/{}", 46 | "Behance": "https://www.behance.net/{}", 47 | "AngelList": "https://angel.co/{}", 48 | "ProductHunt": "https://www.producthunt.com/@{}", 49 | "500px": "https://500px.com/{}", 50 | "LinkedIn": "https://www.linkedin.com/in/{}", 51 | "Snapchat": "https://www.snapchat.com/add/{}", 52 | "WhatsApp": "https://wa.me/{}", 53 | "Discord": "https://discord.com/users/{}", 54 | "Telegram": "https://t.me/{}", 55 | "Quora": "https://www.quora.com/profile/{}", 56 | "TikTok": "https://www.tiktok.com/@{}", 57 | "Patreon": "https://www.patreon.com/{}", 58 | "Weibo": "https://weibo.com/{}", 59 | "OKCupid": "https://www.okcupid.com/profile/{}", 60 | "Meetup": "https://www.meetup.com/members/{}", 61 | "Myspace": "https://myspace.com/{}", 62 | "Kaggle": "https://www.kaggle.com/{}", 63 | "CodePen": "https://codepen.io/{}", 64 | "StackOverflow": "https://stackoverflow.com/users/{}", 65 | "HackerRank": "https://www.hackerrank.com/{}", 66 | "Xing": "https://www.xing.com/profile/{}", 67 | "Deezer": "https://www.deezer.com/en/user/{}", 68 | "Mix": "https://mix.com/{}", 69 | "Snapfish": "https://www.snapfish.com/{}", 70 | "Periscope": "https://www.pscp.tv/{}", 71 | "Tidal": "https://tidal.com/{}", 72 | "Yelp": "https://www.yelp.com/user_details?userid={}", 73 | "Disqus": "https://disqus.com/by/{}", 74 | "Dailymotion": "https://www.dailymotion.com/{}", 75 | "Ravelry": "https://www.ravelry.com/people/{}", 76 | "ReverbNation": "https://www.reverbnation.com/{}", 77 | "Vine": "https://vine.co/u/{}", 78 | "Foursquare": "https://foursquare.com/user/{}", 79 | "Mastodon": "https://mastodon.social/@{}", 80 | "Ello": "https://ello.co/{}", 81 | "GitLab": "https://gitlab.com/{}", 82 | "Giphy": "https://giphy.com/{}", 83 | "Hootsuite": "https://hootsuite.com/{}", 84 | "LiveJournal": "https://{}.livejournal.com", 85 | "Linktree": "https://linktr.ee/{}", 86 | "Prezi": "https://prezi.com/{}", 87 | "Groupon": "https://www.groupon.com/profile/{}", 88 | "Liveleak": "https://www.liveleak.com/c/{}", 89 | "Joomla": "https://www.joomla.org/user/{}", 90 | "StackExchange": "https://stackexchange.com/users/{}", 91 | "Weebly": "https://{}.weebly.com", 92 | "CodeWars": "https://www.codewars.com/users/{}", 93 | "Taringa": "https://www.taringa.net/{}", 94 | "Gumroad": "https://gumroad.com/{}", 95 | "Shopify": "https://{}.myshopify.com", 96 | "8tracks": "https://8tracks.com/{}", 97 | "Couchsurfing": "https://www.couchsurfing.com/people/{}", 98 | "OpenSea": "https://opensea.io/{}", 99 | "Trello": "https://trello.com/{}", 100 | "Tinder": "https://www.tinder.com/@{}", 101 | "Strava": "https://www.strava.com/athletes/{}", 102 | "Fiverr": "https://www.fiverr.com/{}", 103 | "Coursera": "https://www.coursera.org/user/{}", 104 | "Badoo": "https://badoo.com/profile/{}", 105 | "Wix": "https://www.wix.com/website/{}", 106 | "GitHub": "https://github.com/{}" 107 | } 108 | 109 | def check_username(platform, url): 110 | try: 111 | response = requests.get(url) 112 | if response.status_code == 200: 113 | if "404" in response.text or "not found" in response.text.lower(): 114 | return platform, url, False 115 | return platform, url, True 116 | except requests.RequestException as e: 117 | print(f"Erreur lors de la vérification de {platform}: {e}") 118 | return platform, url, username 119 | 120 | def track_username(username): 121 | results = {} 122 | username_lower = username.lower() 123 | 124 | with ThreadPoolExecutor(max_workers=15) as executor: 125 | future_to_platform = { 126 | executor.submit( 127 | check_username, 128 | platform, 129 | url_template.format(username_lower if "{}" in url_template else username) 130 | ): platform 131 | for platform, url_template in platforms.items() 132 | } 133 | 134 | for future in as_completed(future_to_platform): 135 | platform = future_to_platform[future] 136 | try: 137 | p, url, exists = future.result() 138 | if exists: 139 | results[p] = url 140 | except (ConnectionError, TimeoutError) as e: 141 | print(f"Connection error for {platform}: {e}") 142 | except Exception as e: 143 | print(f"Error retrieving results for {platform}: {e}") 144 | 145 | return results 146 | 147 | if __name__ == "__main__": 148 | username = input("Entrez le nom d'utilisateur à suivre: ") 149 | results = track_username(username) 150 | if results: 151 | for platform, url in results.items(): 152 | print(f"{username} est présent sur {platform} : {url}") 153 | else: 154 | print(f"{username} n'est présent sur aucun des sites spécifiés.") 155 | 156 | def end(): 157 | print(f""" 158 | [1] back to menu 159 | """) 160 | 161 | choice = int(input('\033[0;35m Choose >> ')) 162 | 163 | def execute_script(choice): 164 | if choice == 1: 165 | os.system('python ./main.py') 166 | 167 | execute_script(choice) 168 | -------------------------------------------------------------------------------- /modules/ip_lookup.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import requests 4 | import socket 5 | import platform 6 | import concurrent.futures 7 | from pystyle import Colors, Colorate, Center 8 | 9 | os.system("cls") 10 | def ping_ip(ip_address): 11 | try: 12 | result = subprocess.run(['ping', ip_address], capture_output=True, text=True, timeout=10) 13 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nPINGING {ip_address}\n{'=' * 60}")) 14 | print(result.stdout) 15 | except subprocess.TimeoutExpired: 16 | print(Colorate.Horizontal(Colors.red_to_blue, "Timeout expired. No response received.")) 17 | except Exception as e: 18 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 19 | 20 | 21 | def get_ip_information(ip_address): 22 | try: 23 | api_key = 'bf609e0ae94346a69905706a764efce5' 24 | response = requests.get(f"https://api.ipgeolocation.io/ipgeo?apiKey={api_key}&ip={ip_address}").json() 25 | 26 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nIP Information\n{'=' * 60}")) 27 | 28 | info_to_display = { 29 | "IP Address": response.get("ip"), 30 | "Continent": f"{response.get('continent_name')} ({response.get('continent_code')})", 31 | "Country": f"{response.get('country_name')} ({response.get('country_code3')})", 32 | "Region": response.get("state_prov"), 33 | "City": response.get("city"), 34 | "Postal Code": response.get("zipcode") if response.get("zipcode") else "Not available", 35 | "Latitude": response.get("latitude"), 36 | "Longitude": response.get("longitude"), 37 | "Time Zone": format_timezone(response.get('time_zone')), 38 | "ISP": response.get("isp"), 39 | "Organization": response.get("organization"), 40 | } 41 | 42 | for key, value in info_to_display.items(): 43 | if value: 44 | print(Colorate.Horizontal(Colors.red_to_blue, f"{key}: {value}")) 45 | 46 | except Exception as e: 47 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 48 | 49 | 50 | def format_timezone(timezone_info): 51 | if timezone_info: 52 | return f"{timezone_info.get('name')} (UTC{timezone_info.get('offset')})" 53 | else: 54 | return "" 55 | 56 | 57 | def traceroute_ip(ip_address): 58 | try: 59 | command = ['tracert', ip_address] if platform.system().lower() == "windows" else ['traceroute', ip_address] 60 | result = subprocess.run(command, capture_output=True, text=True) 61 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nTRACEROUTE {ip_address}\n{'=' * 60}")) 62 | print(result.stdout) 63 | except Exception as e: 64 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 65 | 66 | 67 | def reverse_dns_lookup(ip_address): 68 | try: 69 | result = subprocess.run(['nslookup', ip_address], capture_output=True, text=True) 70 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nREVERSE DNS LOOKUP {ip_address}\n{'=' * 60}")) 71 | print(result.stdout) 72 | except Exception as e: 73 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 74 | 75 | 76 | def scan_port(ip_address, port): 77 | try: 78 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 79 | sock.settimeout(1) 80 | result = sock.connect_ex((ip_address, port)) 81 | sock.close() 82 | return port if result == 0 else None 83 | except Exception: 84 | return None 85 | 86 | 87 | def port_scan(ip_address): 88 | open_ports = [] 89 | print(Colorate.Horizontal(Colors.red_to_blue, f"Scanning ports on {ip_address}... This may take a while.")) 90 | with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor: 91 | futures = {executor.submit(scan_port, ip_address, port): port for port in range(1, 1025)} 92 | for future in concurrent.futures.as_completed(futures): 93 | port = futures[future] 94 | if future.result(): 95 | open_ports.append(port) 96 | print(Colorate.Horizontal(Colors.red_to_blue, f"Port {port} is open")) 97 | 98 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nOPEN PORTS ON {ip_address}\n{'=' * 60}")) 99 | print(Colorate.Horizontal(Colors.red_to_blue, f"Open ports: {open_ports}")) 100 | 101 | 102 | def whois_lookup(ip_address): 103 | try: 104 | import whois 105 | result = whois.whois(ip_address) 106 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nWHOIS LOOKUP {ip_address}\n{'=' * 60}")) 107 | print(Colorate.Horizontal(Colors.red_to_blue, str(result))) 108 | except Exception as e: 109 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 110 | 111 | 112 | def blacklist_check(ip_address): 113 | try: 114 | response = requests.get(f"https://api.abuseipdb.com/api/v2/check?ipAddress={ip_address}", headers={ 115 | 'Key': '173b1074344847a7968aeee29091c3bea4db13e52eeb78e9f921ba1fe043468bf9d965d63666d411', 116 | 'Accept': 'application/json' 117 | }).json() 118 | print(Colorate.Horizontal(Colors.red_to_blue, f"\n{'=' * 60}\nBLACKLIST CHECK {ip_address}\n{'=' * 60}")) 119 | print(Colorate.Horizontal(Colors.red_to_blue, str(response))) 120 | except Exception as e: 121 | print(Colorate.Horizontal(Colors.red_to_blue, f"An error occurred: {e}")) 122 | 123 | 124 | def main_menu(): 125 | print(Colorate.Horizontal(Colors.red_to_blue, '1) Ping IP')) 126 | print(Colorate.Horizontal(Colors.red_to_blue, '2) IP Information')) 127 | print(Colorate.Horizontal(Colors.red_to_blue, '3) Traceroute')) 128 | print(Colorate.Horizontal(Colors.red_to_blue, '4) Reverse DNS Lookup')) 129 | print(Colorate.Horizontal(Colors.red_to_blue, '5) Port Scan')) 130 | print(Colorate.Horizontal(Colors.red_to_blue, '6) Whois Lookup')) 131 | print(Colorate.Horizontal(Colors.red_to_blue, '7) Blacklist Check')) 132 | print(Colorate.Horizontal(Colors.red_to_blue, '8) Exit')) 133 | 134 | 135 | def main(): 136 | ascii_art = """ 137 | ██▓ ██▓███ ▄▄▄█████▓ ▒█████ ▒█████ ██▓ ██████ 138 | ▓██▒▓██░ ██▒ ▓ ██▒ ▓▒▒██▒ ██▒▒██▒ ██▒▓██▒ ▒██ ▒ 139 | ▒██▒▓██░ ██▓▒ ▒ ▓██░ ▒░▒██░ ██▒▒██░ ██▒▒██░ ░ ▓██▄ 140 | ░██░▒██▄█▓▒ ▒ ░ ▓██▓ ░ ▒██ ██░▒██ ██░▒██░ ▒ ██▒ 141 | ░██░▒██▒ ░ ░ ▒██▒ ░ ░ ████▓▒░░ ████▓▒░░██████▒▒██████▒▒ 142 | ░▓ ▒▓▒░ ░ ░ ▒ ░░ ░ ▒░▒░▒░ ░ ▒░▒░▒░ ░ ▒░▓ ░▒ ▒▓▒ ▒ ░ 143 | ▒ ░░▒ ░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ░ ▒ ░░ ░▒ ░ ░ 144 | ▒ ░░░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ ░ ░ 145 | ░ ░ ░ ░ ░ ░ ░ ░ 146 | 147 | Special thenks to .gg/toolsfr 148 | who agreed to let clarity use his tool 149 | """ 150 | colored_ascii = Colorate.Horizontal(Colors.red_to_blue, ascii_art) 151 | print(Center.XCenter(colored_ascii)) 152 | 153 | while True: 154 | main_menu() 155 | option = input(Colorate.Horizontal(Colors.red_to_blue, "\nEnter your choice: ")) 156 | 157 | if option == "1": 158 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address to ping: ")) 159 | ping_ip(ip_address) 160 | elif option == "2": 161 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address to get information: ")) 162 | get_ip_information(ip_address) 163 | elif option == "3": 164 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address for traceroute: ")) 165 | traceroute_ip(ip_address) 166 | elif option == "4": 167 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address for reverse DNS lookup: ")) 168 | reverse_dns_lookup(ip_address) 169 | elif option == "5": 170 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address for port scan: ")) 171 | port_scan(ip_address) 172 | elif option == "6": 173 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address for whois lookup: ")) 174 | whois_lookup(ip_address) 175 | elif option == "7": 176 | ip_address = input(Colorate.Horizontal(Colors.red_to_blue, "Enter IP address for blacklist check: ")) 177 | blacklist_check(ip_address) 178 | elif option == "8": 179 | print(Colorate.Horizontal(Colors.red_to_blue, "Exiting program...")) 180 | os.system("python ./main.py") 181 | else: 182 | print(Colorate.Horizontal(Colors.red_to_blue, "Invalid option. Please choose a number from 1 to 8.")) 183 | 184 | 185 | if __name__ == "__main__": 186 | main() --------------------------------------------------------------------------------