[
  {
    "path": "GhostTR.py",
    "content": "#!/usr/bin/python\n# << CODE BY HUNX04\n# << MAU RECODE ??? IZIN DULU LAH,  MINIMAL TAG AKUN GITHUB MIMIN YANG MENGARAH KE AKUN INI, LEBIH GAMPANG SI PAKE FORK\n# << KALAU DI ATAS TIDAK DI IKUTI MAKA AKAN MENDAPATKAN DOSA KARENA MIMIN GAK IKHLAS\n# “Wahai orang-orang yang beriman! Janganlah kamu saling memakan harta sesamamu dengan jalan yang batil,” (QS. An Nisaa': 29). Rasulullah SAW juga melarang umatnya untuk mengambil hak orang lain tanpa izin.\n\n# IMPORT MODULE\n\nimport json\nimport requests\nimport time\nimport os\nimport phonenumbers\nfrom phonenumbers import carrier, geocoder, timezone\nfrom sys import stderr\n\nBl = '\\033[30m'  # VARIABLE BUAT WARNA CUYY\nRe = '\\033[1;31m'\nGr = '\\033[1;32m'\nYe = '\\033[1;33m'\nBlu = '\\033[1;34m'\nMage = '\\033[1;35m'\nCy = '\\033[1;36m'\nWh = '\\033[1;37m'\n\n\n# utilities\n\n# decorator for attaching run_banner to a function\ndef is_option(func):\n    def wrapper(*args, **kwargs):\n        run_banner()\n        func(*args, **kwargs)\n\n\n    return wrapper\n\n\n# FUNCTIONS FOR MENU\n@is_option\ndef IP_Track():\n    ip = input(f\"{Wh}\\n Enter IP target : {Gr}\")  # INPUT IP ADDRESS\n    print()\n    print(f' {Wh}============= {Gr}SHOW INFORMATION IP ADDRESS {Wh}=============')\n    req_api = requests.get(f\"http://ipwho.is/{ip}\")  # API IPWHOIS.IS\n    ip_data = json.loads(req_api.text)\n    time.sleep(2)\n    print(f\"{Wh}\\n IP target       :{Gr}\", ip)\n    print(f\"{Wh} Type IP         :{Gr}\", ip_data[\"type\"])\n    print(f\"{Wh} Country         :{Gr}\", ip_data[\"country\"])\n    print(f\"{Wh} Country Code    :{Gr}\", ip_data[\"country_code\"])\n    print(f\"{Wh} City            :{Gr}\", ip_data[\"city\"])\n    print(f\"{Wh} Continent       :{Gr}\", ip_data[\"continent\"])\n    print(f\"{Wh} Continent Code  :{Gr}\", ip_data[\"continent_code\"])\n    print(f\"{Wh} Region          :{Gr}\", ip_data[\"region\"])\n    print(f\"{Wh} Region Code     :{Gr}\", ip_data[\"region_code\"])\n    print(f\"{Wh} Latitude        :{Gr}\", ip_data[\"latitude\"])\n    print(f\"{Wh} Longitude       :{Gr}\", ip_data[\"longitude\"])\n    lat = int(ip_data['latitude'])\n    lon = int(ip_data['longitude'])\n    print(f\"{Wh} Maps            :{Gr}\", f\"https://www.google.com/maps/@{lat},{lon},8z\")\n    print(f\"{Wh} EU              :{Gr}\", ip_data[\"is_eu\"])\n    print(f\"{Wh} Postal          :{Gr}\", ip_data[\"postal\"])\n    print(f\"{Wh} Calling Code    :{Gr}\", ip_data[\"calling_code\"])\n    print(f\"{Wh} Capital         :{Gr}\", ip_data[\"capital\"])\n    print(f\"{Wh} Borders         :{Gr}\", ip_data[\"borders\"])\n    print(f\"{Wh} Country Flag    :{Gr}\", ip_data[\"flag\"][\"emoji\"])\n    print(f\"{Wh} ASN             :{Gr}\", ip_data[\"connection\"][\"asn\"])\n    print(f\"{Wh} ORG             :{Gr}\", ip_data[\"connection\"][\"org\"])\n    print(f\"{Wh} ISP             :{Gr}\", ip_data[\"connection\"][\"isp\"])\n    print(f\"{Wh} Domain          :{Gr}\", ip_data[\"connection\"][\"domain\"])\n    print(f\"{Wh} ID              :{Gr}\", ip_data[\"timezone\"][\"id\"])\n    print(f\"{Wh} ABBR            :{Gr}\", ip_data[\"timezone\"][\"abbr\"])\n    print(f\"{Wh} DST             :{Gr}\", ip_data[\"timezone\"][\"is_dst\"])\n    print(f\"{Wh} Offset          :{Gr}\", ip_data[\"timezone\"][\"offset\"])\n    print(f\"{Wh} UTC             :{Gr}\", ip_data[\"timezone\"][\"utc\"])\n    print(f\"{Wh} Current Time    :{Gr}\", ip_data[\"timezone\"][\"current_time\"])\n\n\n@is_option\ndef phoneGW():\n    User_phone = input(\n        f\"\\n {Wh}Enter phone number target {Gr}Ex [+6281xxxxxxxxx] {Wh}: {Gr}\")  # INPUT NUMBER PHONE\n    default_region = \"ID\"  # DEFAULT NEGARA INDONESIA\n\n    parsed_number = phonenumbers.parse(User_phone, default_region)  # VARIABLE PHONENUMBERS\n    region_code = phonenumbers.region_code_for_number(parsed_number)\n    jenis_provider = carrier.name_for_number(parsed_number, \"en\")\n    location = geocoder.description_for_number(parsed_number, \"id\")\n    is_valid_number = phonenumbers.is_valid_number(parsed_number)\n    is_possible_number = phonenumbers.is_possible_number(parsed_number)\n    formatted_number = phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.INTERNATIONAL)\n    formatted_number_for_mobile = phonenumbers.format_number_for_mobile_dialing(parsed_number, default_region,\n                                                                                with_formatting=True)\n    number_type = phonenumbers.number_type(parsed_number)\n    timezone1 = timezone.time_zones_for_number(parsed_number)\n    timezoneF = ', '.join(timezone1)\n\n    print(f\"\\n {Wh}========== {Gr}SHOW INFORMATION PHONE NUMBERS {Wh}==========\")\n    print(f\"\\n {Wh}Location             :{Gr} {location}\")\n    print(f\" {Wh}Region Code          :{Gr} {region_code}\")\n    print(f\" {Wh}Timezone             :{Gr} {timezoneF}\")\n    print(f\" {Wh}Operator             :{Gr} {jenis_provider}\")\n    print(f\" {Wh}Valid number         :{Gr} {is_valid_number}\")\n    print(f\" {Wh}Possible number      :{Gr} {is_possible_number}\")\n    print(f\" {Wh}International format :{Gr} {formatted_number}\")\n    print(f\" {Wh}Mobile format        :{Gr} {formatted_number_for_mobile}\")\n    print(f\" {Wh}Original number      :{Gr} {parsed_number.national_number}\")\n    print(\n        f\" {Wh}E.164 format         :{Gr} {phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.E164)}\")\n    print(f\" {Wh}Country code         :{Gr} {parsed_number.country_code}\")\n    print(f\" {Wh}Local number         :{Gr} {parsed_number.national_number}\")\n    if number_type == phonenumbers.PhoneNumberType.MOBILE:\n        print(f\" {Wh}Type                 :{Gr} This is a mobile number\")\n    elif number_type == phonenumbers.PhoneNumberType.FIXED_LINE:\n        print(f\" {Wh}Type                 :{Gr} This is a fixed-line number\")\n    else:\n        print(f\" {Wh}Type                 :{Gr} This is another type of number\")\n\n\n@is_option\ndef TrackLu():\n    try:\n        username = input(f\"\\n {Wh}Enter Username : {Gr}\")\n        results = {}\n        social_media = [\n            {\"url\": \"https://www.facebook.com/{}\", \"name\": \"Facebook\"},\n            {\"url\": \"https://www.twitter.com/{}\", \"name\": \"Twitter\"},\n            {\"url\": \"https://www.instagram.com/{}\", \"name\": \"Instagram\"},\n            {\"url\": \"https://www.linkedin.com/in/{}\", \"name\": \"LinkedIn\"},\n            {\"url\": \"https://www.github.com/{}\", \"name\": \"GitHub\"},\n            {\"url\": \"https://www.pinterest.com/{}\", \"name\": \"Pinterest\"},\n            {\"url\": \"https://www.tumblr.com/{}\", \"name\": \"Tumblr\"},\n            {\"url\": \"https://www.youtube.com/{}\", \"name\": \"Youtube\"},\n            {\"url\": \"https://soundcloud.com/{}\", \"name\": \"SoundCloud\"},\n            {\"url\": \"https://www.snapchat.com/add/{}\", \"name\": \"Snapchat\"},\n            {\"url\": \"https://www.tiktok.com/@{}\", \"name\": \"TikTok\"},\n            {\"url\": \"https://www.behance.net/{}\", \"name\": \"Behance\"},\n            {\"url\": \"https://www.medium.com/@{}\", \"name\": \"Medium\"},\n            {\"url\": \"https://www.quora.com/profile/{}\", \"name\": \"Quora\"},\n            {\"url\": \"https://www.flickr.com/people/{}\", \"name\": \"Flickr\"},\n            {\"url\": \"https://www.periscope.tv/{}\", \"name\": \"Periscope\"},\n            {\"url\": \"https://www.twitch.tv/{}\", \"name\": \"Twitch\"},\n            {\"url\": \"https://www.dribbble.com/{}\", \"name\": \"Dribbble\"},\n            {\"url\": \"https://www.stumbleupon.com/stumbler/{}\", \"name\": \"StumbleUpon\"},\n            {\"url\": \"https://www.ello.co/{}\", \"name\": \"Ello\"},\n            {\"url\": \"https://www.producthunt.com/@{}\", \"name\": \"Product Hunt\"},\n            {\"url\": \"https://www.snapchat.com/add/{}\", \"name\": \"Snapchat\"},\n            {\"url\": \"https://www.telegram.me/{}\", \"name\": \"Telegram\"},\n            {\"url\": \"https://www.weheartit.com/{}\", \"name\": \"We Heart It\"}\n        ]\n        for site in social_media:\n            url = site['url'].format(username)\n            response = requests.get(url)\n            if response.status_code == 200:\n                results[site['name']] = url\n            else:\n                results[site['name']] = (f\"{Ye}Username not found {Ye}!\")\n    except Exception as e:\n        print(f\"{Re}Error : {e}\")\n        return\n\n    print(f\"\\n {Wh}========== {Gr}SHOW INFORMATION USERNAME {Wh}==========\")\n    print()\n    for site, url in results.items():\n        print(f\" {Wh}[ {Gr}+ {Wh}] {site} : {Gr}{url}\")\n\n\n@is_option\ndef showIP():\n    respone = requests.get('https://api.ipify.org/')\n    Show_IP = respone.text\n\n    print(f\"\\n {Wh}========== {Gr}SHOW INFORMATION YOUR IP {Wh}==========\")\n    print(f\"\\n {Wh}[{Gr} + {Wh}] Your IP Adrress : {Gr}{Show_IP}\")\n    print(f\"\\n {Wh}==============================================\")\n\n\n# OPTIONS\noptions = [\n    {\n        'num': 1,\n        'text': 'IP Tracker',\n        'func': IP_Track\n    },\n    {\n        'num': 2,\n        'text': 'Show Your IP',\n        'func': showIP\n\n    },\n    {\n        'num': 3,\n        'text': 'Phone Number Tracker',\n        'func': phoneGW\n    },\n    {\n        'num': 4,\n        'text': 'Username Tracker',\n        'func': TrackLu\n    },\n    {\n        'num': 0,\n        'text': 'Exit',\n        'func': exit\n    }\n]\n\n\ndef clear():\n    # for windows\n    if os.name == 'nt':\n        _ = os.system('cls')\n    # for mac and linux\n    else:\n        _ = os.system('clear')\n\n\ndef call_option(opt):\n    if not is_in_options(opt):\n        raise ValueError('Option not found')\n    for option in options:\n        if option['num'] == opt:\n            if 'func' in option:\n                option['func']()\n            else:\n                print('No function detected')\n\n\ndef execute_option(opt):\n    try:\n        call_option(opt)\n        input(f'\\n{Wh}[ {Gr}+ {Wh}] {Gr}Press enter to continue')\n        main()\n    except ValueError as e:\n        print(e)\n        time.sleep(2)\n        execute_option(opt)\n    except KeyboardInterrupt:\n        print(f'\\n{Wh}[ {Re}! {Wh}] {Re}Exit')\n        time.sleep(2)\n        exit()\n\n\ndef option_text():\n    text = ''\n    for opt in options:\n        text += f'{Wh}[ {opt[\"num\"]} ] {Gr}{opt[\"text\"]}\\n'\n    return text\n\n\ndef is_in_options(num):\n    for opt in options:\n        if opt['num'] == num:\n            return True\n    return False\n\n\ndef option():\n    # BANNER TOOLS\n    clear()\n    stderr.writelines(f\"\"\"\n       ________               __      ______                __  \n      / ____/ /_  ____  _____/ /_    /_  __/________ ______/ /__\n     / / __/ __ \\/ __ \\/ ___/ __/_____/ / / ___/ __ `/ ___/ //_/\n    / /_/ / / / / /_/ (__  ) /_/_____/ / / /  / /_/ / /__/ ,<   \n    \\____/_/ /_/\\____/____/\\__/     /_/ /_/   \\__,_/\\___/_/|_| \n\n              {Wh}[ + ]  C O D E   B Y  H U N X  [ + ]\n    \"\"\")\n\n    stderr.writelines(f\"\\n\\n\\n{option_text()}\")\n\n\ndef run_banner():\n    clear()\n    time.sleep(1)\n    stderr.writelines(f\"\"\"{Wh}\n         .-.\n       .'   `.          {Wh}--------------------------------\n       :g g   :         {Wh}| {Gr}GHOST - TRACKER - IP ADDRESS {Wh}|\n       : o    `.        {Wh}|       {Gr}@CODE BY HUNXBYTS      {Wh}|\n      :         ``.     {Wh}--------------------------------\n     :             `.\n    :  :         .   `.\n    :   :          ` . `.\n     `.. :            `. ``;\n        `:;             `:'\n           :              `.\n            `.              `.     .\n              `'`'`'`---..,___`;.-'\n        \"\"\")\n    time.sleep(0.5)\n\n\ndef main():\n    clear()\n    option()\n    time.sleep(1)\n    try:\n        opt = int(input(f\"{Wh}\\n [ + ] {Gr}Select Option : {Wh}\"))\n        execute_option(opt)\n    except ValueError:\n        print(f'\\n{Wh}[ {Re}! {Wh}] {Re}Please input number')\n        time.sleep(2)\n        main()\n\n\nif __name__ == '__main__':\n    try:\n        main()\n    except KeyboardInterrupt:\n        print(f'\\n{Wh}[ {Re}! {Wh}] {Re}Exit')\n        time.sleep(2)\n        exit()\n"
  },
  {
    "path": "README.md",
    "content": "# GhostTrack\nUseful tool to track location or mobile number, so this tool can be called osint or also information gathering\n\n<img src=\"https://github.com/HunxByts/GhostTrack/blob/main/asset/bn.png\"/>\n\nNew update :\n```Version 2.2```\n\n### Instalation on Linux (deb)\n```\nsudo apt-get install git\nsudo apt-get install python3\n```\n\n### Instalation on Termux\n```\npkg install git\npkg install python3\n```\n\n### Usage Tool\n```\ngit clone https://github.com/HunxByts/GhostTrack.git\ncd GhostTrack\npip3 install -r requirements.txt\npython3 GhostTR.py\n```\n\nDisplay on the menu ```IP Tracker```\n\n<img src=\"https://github.com/HunxByts/GhostTrack/blob/main/asset/ip.png \" />\n\non the IP Track menu, you can combo with the seeker tool to get the target IP\n<details>\n<summary>:zap: Install Seeker :</summary>\n- <strong><a href=\"https://github.com/thewhiteh4t/seeker\">Get Seeker</a></strong>\n</details>\n\nDisplay on the menu ```Phone Tracker```\n\n<img src=\"https://github.com/HunxByts/GhostTrack/blob/main/asset/phone.png\" />\n\non this menu you can search for information from the target phone number\n\nDisplay on the menu ```Username Tracker```\n\n<img src=\"https://github.com/HunxByts/GhostTrack/blob/main/asset/User.png\"/>\non this menu you can search for information from the target username on social media\n\n<details>\n<summary>:zap: Author :</summary>\n- <strong><a href=\"https://github.com/HunxByts\">HunxByts</a></strong>\n</details>\n"
  },
  {
    "path": "asset/text",
    "content": "Image..\n"
  },
  {
    "path": "requirements.txt",
    "content": "requests\nphonenumbers\n"
  }
]