Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v4
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

4.1

IP Tracker

IP_Track adalah satu-satunya fungsi pelacakan yang mengambil data geolokasi dari layanan eksternal ipwho.is. Fungsi ini terdaftar sebagai opsi menu pertama dengan 'num': 1 dan teks 'IP Tracker', sehingga call_option memanggilnya lewat kunci 'func' (GhostTR.py:180-185, GhostTR.py:219-227). Dekorator is_option membungkusnya: wrapper menjalankan run_banner lebih dulu, lalu memanggil IP_Track tanpa argumen (GhostTR.py:29-36).

Siklus satu request

Satu eksekusi IP_Track adalah satu request HTTP ke ipwho.is yang hasilnya langsung dicetak ke stdout.

sequenceDiagram
    autonumber
    actor U as User
    participant M as main / execute_option
    participant C as call_option
    participant D as is_option wrapper
    participant T as IP_Track
    participant A as ipwho.is

    U->>M: Select Option 1
    M->>C: execute_option lalu call_option
    C->>C: is_in_options
    C->>D: option func = IP_Track
    D->>D: run_banner
    D->>T: func
    T->>U: Enter IP target
    U-->>T: ip
    T->>T: print header SHOW INFORMATION IP ADDRESS
    T->>A: GET http://ipwho.is/ + ip
    A-->>T: req_api.text
    T->>T: json.loads
    T->>T: time.sleep 2
    T->>U: print 28 baris keterangan
    T-->>M: return
    M->>U: Press enter to continue
    M->>M: main
%% fig: Siklus satu request IP_Track
%% desc: User memilih opsi 1 sehingga wrapper is_option mencetak banner, IP_Track mengambil IP target, memanggil ipwho.is, lalu mencetak hasilnya sebelum menu dimuat ulang.
Fig. 1: Siklus satu request IP_TrackUser memilih opsi 1 sehingga wrapper is_option mencetak banner, IP_Track mengambil IP target, memanggil ipwho.is, lalu mencetak hasilnya sebelum menu dimuat ulang.

Prompt Enter IP target : muncul setelah banner, dan nilai ip disisipkan apa adanya ke URL http://ipwho.is/{ip} tanpa pemeriksaan format. Body respons dibaca sebagai teks lalu diubah dengan json.loads, bukan lewat req_api.json(), dan status_code tidak pernah diperiksa. Setelah payload siap, time.sleep(2) menahan proses dua detik sebelum baris pertama dicetak (GhostTR.py:40-47). Ketika fungsi selesai, execute_option meminta Press enter to continue lalu memanggil main() kembali (GhostTR.py:230-234).

Kelompok data yang dicetak

IP_Track mencetak 28 baris keterangan, semuanya lewat akses key langsung ip_data["..."]. Tiga blok data pada respons ipwho.is dipetakan ke blok cetak yang berbeda.

Blok cetakKey JSONBaris
IP targetvariabel lokal ip, bukan dari responsGhostTR.py:48
Tipe dan negaratype, country, country_codeGhostTR.py:49-51
Wilayahcity, continent, continent_code, region, region_codeGhostTR.py:52-56
Koordinat mentahlatitude, longitudeGhostTR.py:57-58
Turunan Mapslat = int(...), lon = int(...), URL https://www.google.com/maps/@{lat},{lon},8zGhostTR.py:59-61
Administrasi dan benderais_eu, postal, calling_code, capital, borders, flag.emojiGhostTR.py:62-67
Koneksiconnection.asn, connection.org, connection.isp, connection.domainGhostTR.py:68-71
Zona waktutimezone.id, timezone.abbr, timezone.is_dst, timezone.offset, timezone.utc, timezone.current_timeGhostTR.py:72-77
graph LR
    IN["ip dari input"] --> REQ["requests.get http://ipwho.is/{ip}"]
    REQ --> J["json.loads ip_data"]
    J --> GEO["Geolocation: type, country, city, region"]
    J --> COORD["latitude dan longitude"]
    J --> CONN["connection: asn, org, isp, domain"]
    J --> TZ["timezone: id, abbr, offset, utc"]
    J --> FLAG["flag.emoji"]
    COORD --> MAPS["Maps URL dengan zoom 8z"]
    GEO --> OUT["stdout terminal"]
    MAPS --> OUT
    CONN --> OUT
    TZ --> OUT
    FLAG --> OUT
    style REQ fill:#f59e0b,color:#000
    style J fill:#8b5cf6,color:#fff
    style GEO fill:#336791,color:#fff
    style COORD fill:#336791,color:#fff
    style CONN fill:#336791,color:#fff
    style TZ fill:#336791,color:#fff
    style FLAG fill:#8b5cf6,color:#fff
    style MAPS fill:#2d7d46,color:#fff
    style OUT fill:#2d7d46,color:#fff
%% fig: Pemetaan payload ipwho.is ke blok cetak
%% desc: Satu payload JSON dipecah menjadi blok geolokasi, koneksi, zona waktu, dan bendera, lalu seluruhnya bermuara pada cetakan ke stdout.
Fig. 2: Pemetaan payload ipwho.is ke blok cetakSatu payload JSON dipecah menjadi blok geolokasi, koneksi, zona waktu, dan bendera, lalu seluruhnya bermuara pada cetakan ke stdout.

Baris Maps adalah satu-satunya nilai turunan: int() membuang bagian desimal dari latitude dan longitude, sehingga URL Google Maps bisa bergeser sampai nyaris satu derajat dari posisi sebenarnya (GhostTR.py:59-61).

Jalur gagal

Tidak ada try di dalam IP_Track, jadi kegagalan request maupun key yang hilang keluar sebagai traceback.

KondisiYang terjadiRujukan
ipwho.is lambat atau tidak meresponsrequests.get dipanggil tanpa argumen timeout, sehingga proses menunggu tanpa batas sampai diinterupsiGhostTR.py:45-46
IP tidak valid atau kosongrespons tetap di-parse, lalu ip_data["latitude"] memicu KeyError karena key tersebut tidak adaGhostTR.py:57-58
Host tidak terjangkaurequests.exceptions.ConnectionError naik ke pemanggil; execute_option hanya menangkap ValueError dan KeyboardInterruptGhostTR.py:235-238
Koordinat pecahanint() memotong desimal sebelum URL Maps disusunGhostTR.py:59-61

⚠️ URL request memakai skema http, bukan https, sehingga alamat IP target dan hasil pelacakan melintas tanpa enkripsi. Ganti ke https bila tool dijalankan di jaringan yang tidak dipercaya (GhostTR.py:45-46).

Karena IP_Track tidak menangani KeyboardInterrupt sendiri, Ctrl+C saat prompt IP baru ditangani di lapisan pemanggil; rinciannya ada di Penanganan Error dan Interrupt.

Hubungan dengan bagian lain

Pemilihan opsi 1 sampai eksekusi fungsi dijelaskan di Loop Menu dan Dispatch Opsi, sedangkan banner dan konstanta warna yang dipakai setiap baris print dijelaskan di Banner, Warna ANSI, dan Helper. Jangan tertukar dengan Show Your IP: opsi 2 itu hanya menanyakan IP publik mesin sendiri lewat api.ipify.org dan tidak memanggil ipwho.is (GhostTR.py:169-176).

Untuk memperoleh IP target, README menyarankan kombinasi dengan tool Seeker, dan menautkan tangkapan layar contoh keluaran menu IP Tracker (README.md:29-31).