10
Peta Endpoint dan Konfigurasi
GhostTrack tidak membaca berkas konfigurasi apa pun. Semua titik konfigurasi ditulis sebagai literal di dalam GhostTR.py: URL endpoint, daftar social_media, dan default_region. Empat handler menu memakai titik-titik itu, yaitu IP_Track (GhostTR.py:40-411), phoneGW (GhostTR.py:80-812), TrackLu (GhostTR.py:121-1223), dan showIP (GhostTR.py:169-1704). Halaman ini memetakan endpoint beserta data yang dikonsumsinya. Perilaku tiap menu dijelaskan di IP Tracker, Phone Number Tracker, Username Tracker, dan Show Your IP.
Peta handler ke endpoint
Hanya tiga permintaan HTTP keluar yang ada di seluruh berkas: satu ke ipwho.is, satu ke api.ipify.org, dan satu per entri social_media.
graph TD
IP_Track["IP_Track"] --> IPWHOIS["ipwho.is GET"]
showIP["showIP"] --> IPIFY["api.ipify.org GET"]
TrackLu["TrackLu"] --> SOCIAL["social_media 24 URL template"]
SOCIAL --> S1["domain + username"]
SOCIAL --> S2["path tetap + username"]
phoneGW["phoneGW"] --> PH["phonenumbers.parse"]
PH --> REGION["default_region = ID"]
PH --> FMT["format_number_for_mobile_dialing"]
REQ["requests"] --> IPWHOIS
REQ --> IPIFY
REQ --> SOCIAL
style IPWHOIS fill:#f59e0b,color:#000
style IPIFY fill:#f59e0b,color:#000
style SOCIAL fill:#f59e0b,color:#000
style REGION fill:#f59e0b,color:#000
style S1 fill:#8b5cf6,color:#fff
style S2 fill:#8b5cf6,color:#fff
style FMT fill:#8b5cf6,color:#fff
style PH fill:#2d7d46,color:#fff
style REQ fill:#2d7d46,color:#fff
%% fig: Kaitan handler ke endpoint dan pustaka
%% desc: Tiga handler memanggil endpoint lewat pustaka requests, sementara phoneGW bergantung pada phonenumbers dan default_region.Warna jingga menandai literal konfigurasi di dalam berkas, ungu menandai nilai turunan yang dibentuk saat runtime, dan hijau menandai jalur pemanggilan yang berhasil.
| Handler | Pemanggilan | Endpoint atau nilai | Baris |
|---|---|---|---|
IP_Track | requests.get(f"http://ipwho.is/{ip}") lalu json.loads(req_api.text) | http://ipwho.is/{ip} | GhostTR.py:45-465 |
showIP | requests.get('https://api.ipify.org/') lalu respone.text | https://api.ipify.org/ | GhostTR.py:171-1726 |
TrackLu | requests.get(url) untuk setiap entri social_media | site['url'].format(username) | GhostTR.py:152-1587 |
phoneGW | phonenumbers.parse(User_phone, default_region) | default_region = "ID" | GhostTR.py:84-868 |
TrackLu memperlakukan kode status 200 sebagai satu-satunya tanda akun ditemukan; kode lain, termasuk 403 dan 429, masuk ke cabang Username not found (GhostTR.py:152-1587).
Field ipwho.is yang dibaca
IP_Track mengakses 26 kunci secara langsung tanpa pengecekan keberadaan kunci, sehingga perubahan bentuk response akan memunculkan KeyError. Penanganan kegagalan seperti itu dibahas di Penanganan Error dan Interupsi.
| Kelompok | Kunci yang dibaca |
|---|---|
| Datar | type, country, country_code, city, continent, continent_code, region, region_code, latitude, longitude, is_eu, postal, calling_code, capital, borders |
flag | emoji |
connection | asn, org, isp, domain |
timezone | id, abbr, is_dst, offset, utc, current_time |
Keseluruhan kunci itu dibaca berurutan di GhostTR.py:49-779. Dua kunci dipakai ulang untuk menyusun tautan peta: int(ip_data['latitude']) dan int(ip_data['longitude']) dipotong menjadi bilangan bulat sebelum ditempel ke https://www.google.com/maps/@... (GhostTR.py:59-6110).
Daftar social_media
Daftar ini berisi 24 entri (GhostTR.py:126-15111). Hanya dua bentuk pola yang dipakai: username langsung setelah domain, atau username setelah satu segmen path tetap.
name | url template | Baris |
|---|---|---|
https://www.facebook.com/{} | 127 | |
https://www.twitter.com/{} | 128 | |
https://www.instagram.com/{} | 129 | |
https://www.linkedin.com/in/{} | 130 | |
| GitHub | https://www.github.com/{} | 131 |
https://www.pinterest.com/{} | 132 | |
| Tumblr | https://www.tumblr.com/{} | 133 |
| Youtube | https://www.youtube.com/{} | 134 |
| SoundCloud | https://soundcloud.com/{} | 135 |
| Snapchat | https://www.snapchat.com/add/{} | 136 |
| TikTok | https://www.tiktok.com/@{} | 137 |
| Behance | https://www.behance.net/{} | 138 |
| Medium | https://www.medium.com/@{} | 139 |
| Quora | https://www.quora.com/profile/{} | 140 |
| Flickr | https://www.flickr.com/people/{} | 141 |
| Periscope | https://www.periscope.tv/{} | 142 |
| Twitch | https://www.twitch.tv/{} | 143 |
| Dribbble | https://www.dribbble.com/{} | 144 |
| StumbleUpon | https://www.stumbleupon.com/stumbler/{} | 145 |
| Ello | https://www.ello.co/{} | 146 |
| Product Hunt | https://www.producthunt.com/@{} | 147 |
| Snapchat | https://www.snapchat.com/add/{} | 148 |
| Telegram | https://www.telegram.me/{} | 149 |
| We Heart It | https://www.weheartit.com/{} | 150 |
⚠️
Snapchattercatat dua kali dengan template yang sama, yaitu pada baris 136 dan baris 148. Karenaresultsdi-key dengansite['name'], entri kedua menimpa entri pertama dan satu permintaan HTTP tambahan tetap dikirim (GhostTR.py:126-15111).
Region default dan dependensi
| Titik konfigurasi | Nilai | Pemakaian | Baris |
|---|---|---|---|
default_region | "ID" | argumen kedua phonenumbers.parse | GhostTR.py:84-868 |
default_region | "ID" | argumen kedua phonenumbers.format_number_for_mobile_dialing | GhostTR.py:92-9412 |
Tanpa prefiks negara pada input, default_region menentukan bagaimana phonenumbers menafsirkan nomor; nilai ini juga menjadi dasar format panggilan mobile. Hanya dua pustaka pihak ketiga yang diperlukan, yaitu requests dan phonenumbers, dan keduanya ditulis tanpa pin versi (requirements.txt:1-213).
Jebakan konfigurasi
⚠️ Endpoint
ipwho.isdipanggil lewathttp://, bukanhttps://, sehingga seluruh respons perujukan IP berjalan tanpa TLS (GhostTR.py:45-465).
⚠️ Tidak satu pun pemanggilan
requests.getdiberitimeout, baik padaIP_Track(GhostTR.py:45-465),TrackLu(GhostTR.py:15414), maupunshowIP(GhostTR.py:171-1726). Bila host tujuan tidak menjawab, proses menunggu tanpa batas. Karena itu, mengganti host atau menambah field berarti mengubah tiga titik berbeda di dalam satu berkas.