Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v2
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

6

IP Tracker

IP_Track adalah opsi nomor 1 pada menu GhostTrack dengan teks IP Tracker; entri di list options mengaitkan 'func': IP_Track pada nomor itu (GhostTR.py:180-185). Pemanggilan terjadi di call_option lewat option['func']() setelah nomor opsi cocok (GhostTR.py:219-227); urutan menu dan loop-nya dibahas di Alur Eksekusi Menu.

Fungsi ini didekorasi @is_option, dan dekorator itu menjalankan run_banner() sebelum body fungsi dieksekusi (GhostTR.py:30-33, GhostTR.py:40-41). Isi banner dan perilaku dekoratornya dijelaskan di Banner dan Dekorator is_option.

Siklus satu request ke ipwho.is

IP_Track meminta satu masukan lewat input(f"{Wh}\n Enter IP target : {Gr}") (GhostTR.py:42), mencetak header SHOW INFORMATION IP ADDRESS (GhostTR.py:44), lalu mengirim requests.get(f"http://ipwho.is/{ip}") dan mengubah req_api.text menjadi ip_data dengan json.loads (GhostTR.py:45-46). Pemanggilan itu tidak menyertakan timeout, headers, maupun params (GhostTR.py:45). Setelah balasan diterima, time.sleep(2) menahan proses dua detik sebelum pencetakan dimulai (GhostTR.py:47).

sequenceDiagram
    autonumber
    participant U as User
    participant T as IP_Track
    participant A as ipwho.is
    participant S as Screen
    U->>T: input Enter IP target
    T->>S: print header SHOW INFORMATION IP ADDRESS
    T->>A: requests.get http://ipwho.is/ip
    A-->>T: req_api.text
    T->>T: json.loads req_api.text menjadi ip_data
    T->>T: time.sleep 2 detik
    T->>S: print 28 baris field dari ip_data
%% fig: Siklus request IP_Track
%% desc: Satu request ke ipwho.is, parsing response menjadi ip_data, lalu pencetakan field ke layar.
Fig. 1: Siklus request IP_TrackSatu request ke ipwho.is, parsing response menjadi ip_data, lalu pencetakan field ke layar.

Tabel berikut merangkum kontrak request yang benar-benar tertulis di kode.

ItemNilai di kodeRujukan
Methodrequests.getGhostTR.py:45
URLhttp://ipwho.is/{ip}GhostTR.py:45
Sumber iphasil input bertipe stringGhostTR.py:42
Header, params, timeouttidak adaGhostTR.py:45
Parsing responsejson.loads(req_api.text) menjadi ip_dataGhostTR.py:45-46
Jeda sebelum cetaktime.sleep(2)GhostTR.py:47

⚠️ Skema URL memakai http:// polos dan tanpa timeout (GhostTR.py:45). Lalu lintas tidak terenkripsi, dan bila ipwho.is lambat merespons, proses akan menunggu tanpa batas. Jika DNS atau koneksi gagal, pengecualian dari requests tidak ditangkap di dalam IP_Track.

Field yang dicetak

Seluruh keluaran berasal dari satu objek ip_data. Body IP_Track memuat 28 baris print yang menyusun laporan (GhostTR.py:40-77), dikelompokkan menurut key JSON yang dibaca.

graph TD
    REQ["requests.get http://ipwho.is/{ip}"] --> RAW["req_api.text"]
    RAW --> IPD["ip_data lewat json.loads"]
    IPD --> GEO["Geolokasi: type, country, city, region, latitude, longitude"]
    IPD --> MAPS["Maps URL dari int latitude dan int longitude"]
    IPD --> META["Negara: is_eu, postal, calling_code, capital, borders, flag emoji"]
    IPD --> CONN["Connection: asn, org, isp, domain"]
    IPD --> TZ["Timezone: id, abbr, is_dst, offset, utc, current_time"]
    style REQ fill:#336791,color:#fff
    style IPD fill:#8b5cf6,color:#fff
    style MAPS fill:#8b5cf6,color:#fff
    style GEO fill:#2d7d46,color:#fff
    style META fill:#2d7d46,color:#fff
    style CONN fill:#2d7d46,color:#fff
    style TZ fill:#2d7d46,color:#fff
%% fig: Percabangan ip_data ke lima kelompok cetak
%% desc: Satu response ipwho.is dipakai untuk empat kelompok field, dan koordinatnya diturunkan menjadi tautan Google Maps.
Fig. 2: Percabangan ip_data ke lima kelompok cetakSatu response ipwho.is dipakai untuk empat kelompok field, dan koordinatnya diturunkan menjadi tautan Google Maps.
GrupKey JSON yang dibacaLabel cetakRujukan
Identitas targetvariabel lokal ipIP targetGhostTR.py:48
Geolokasitype, country, country_code, city, continent, continent_code, region, region_code, latitude, longitudeType sampai LongitudeGhostTR.py:49-58
Turunanint(ip_data['latitude']), int(ip_data['longitude'])MapsGhostTR.py:59-61
Negarais_eu, postal, calling_code, capital, borders, flag.emojiEU sampai Country FlagGhostTR.py:62-67
Koneksi dan ASNconnection.asn, connection.org, connection.isp, connection.domainASN, ORG, ISP, DomainGhostTR.py:68-71
Timezonetimezone.id, timezone.abbr, timezone.is_dst, timezone.offset, timezone.utc, timezone.current_timeID sampai Current TimeGhostTR.py:72-77

Baris IP target mencetak variabel ip apa adanya, bukan nilai dari response, sehingga angka yang tampil selalu sama dengan yang diketik pengguna (GhostTR.py:48). Sementara lat dan lon dihitung ulang dari field response sebelum dirangkai menjadi tautan https://www.google.com/maps/@{lat},{lon},8z (GhostTR.py:59-61).

Titik rawan

  • Konversi int() pada latitude dan longitude membuang bagian desimal koordinat (GhostTR.py:59-61). Untuk koordinat negatif, pemotongan itu menggeser titik ke arah khatulistiwa, sehingga tautan Maps tidak persis menunjuk lokasi asal.
  • IP_Track tidak membungkus body-nya dengan try (GhostTR.py:40-77), berbeda dari TrackLu yang memakai except Exception. Pembaca nilai seperti ip_data["connection"]["asn"] akan melempar KeyError bila key tidak ada, dan execute_option hanya menangkap ValueError serta KeyboardInterrupt (GhostTR.py:230-242). Karena itu kegagalan KeyError atau kegagalan koneksi lolos ke luar; perilaku penanganan di lapisan menu dirinci di Penanganan Error dan Interupsi.
  • Target yang bukan IP valid tetap dikirim ke http://ipwho.is/{ip} tanpa validasi lokal (GhostTR.py:42, GhostTR.py:45).