Personal Notes Parmi

PEPLINK API about

about PEPLINK API


Daftar Endpoint GET Menarik untuk Dicoba

Berikut beberapa endpoint status GET bawaan Peplink yang aman dieksplorasi untuk memperkaya skrip diagnostik Anda:

  • Sistem & Perangkat
  • /api/status.system (Informasi umum hardware & firmware)
  • /api/status.client (Daftar perangkat/PC yang terhubung di jaringan LAN)

  • Konektivitas & Telemetri

  • /api/status.wan.connection (Detail status WAN, IP public, & gateway)
  • /api/status.wan.stat (Statistik penggunaan bandwidth & throughput realtime)

  • Seluler & SIM

  • /api/status.cellular (Detail modul seluler, IMEIs, & preferensi SIM)

  • VPN & Routing

  • /api/status.speedfusion (Status tunnel VPN SpeedFusion / Pepwave)
  • /api/status.route (Tabel routing internal yang aktif)

Jika Anda menemukan struktur data JSON yang menarik saat meneliti Network Tab (F12) browser, tinggal masukkan jalurnya ke probe script di atas untuk melihat isi variabel lengkapnya.

ternyata banyak resource tersedia di sini

https://www.peplink.com/support/downloads/supplementary-materials/

apakah bisa dibuatkan skrip python semacam mengetest API secara berulang ? misalnya saya cukup memasukkan API lalu enter dan skrip mengeksekusi, khusus GET agar aman

Tentu saja! Direktori Supplementary Materials Peplink memang menyediakan dokumentasi OpenAPI/Swagger serta koleksi endpoint yang sangat lengkap.

Untuk memudahkan Anda mengeksplorasi seluruh endpoint GET tersebut, berikut adalah skrip peplink_api_tester.py. Skrip ini bekerja secara interaktif: cukup login sekali, lalu Anda bisa memasukkan jalur API (misalnya /api/status.system) secara berulang. Skrip akan otomatis memvalidasi bahwa perintah tersebut adalah GET demi keamanan, mengeksekusi request, dan menampilkan hasilnya dalam format JSON yang rapi (pretty-print).


Kode Program: peplink_api_tester.py

import requests
import json
import urllib3
import os
from colorama import init

# Inisialisasi warna Terminal
init(autoreset=True)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# ==============================================================================
# KONFIGURASI
# ==============================================================================
ROUTER_IP = "192.168.1.1"
USERNAME = "admin"
PASSWORD = "PasswordAnda"  # Sesuaikan dengan password router Anda

class PeplinkAPITester:
    def __init__(self, ip, username, password):
        self.ip = ip
        self.username = username
        self.password = password
        self.session = requests.Session()
        self.base_url = f"http://{self.ip}"

    def login(self):
        print(f"[*] Menghubungkan ke Peplink ({self.ip})...", end=" ", flush=True)
        url = f"{self.base_url}/api/login"
        try:
            res = self.session.post(url, json={"username": self.username, "password": self.password}, timeout=5)
            data = res.json()
            if isinstance(data, dict) and data.get("stat") == "ok":
                print("\033[92m[ LOGIN BERHASIL ]\033[0m\n")
                return True
            print("\033[91m[ GAGAL LOGIN ]\033[0m Periksa username/password.")
            return False
        except Exception as e:
            print(f"\033[91m[ ERROR ]\033[0m Tidak dapat terhubung ke router: {e}")
            return False

    def start_interactive_loop(self):
        print("=" * 70)
        print("          PEPLINK READ-ONLY (GET) API INTERACTIVE TESTER          ")
        print("=" * 70)
        print("Tips:")
        print(" 1. Masukkan endpoint API yang ingin diuji (contoh: /api/status.system)")
        print(" 2. Ketik 'help' atau 'list' untuk melihat beberapa contoh endpoint umum.")
        print(" 3. Ketik 'clear' untuk membersihkan layar terminal.")
        print(" 4. Ketik 'exit' atau 'quit' untuk keluar dari skrip.\n")

        while True:
            try:
                # Prompt Input Endpoint
                endpoint = input("\033[94mPEPLINK-API-GET > \033[0m").strip()

                if not endpoint:
                    continue

                cmd_lower = endpoint.lower()
                if cmd_lower in ["exit", "quit"]:
                    print("\n[+] Keluar dari API Tester. Sampai jumpa!")
                    break
                elif cmd_lower == "clear":
                    os.system('cls' if os.name == 'nt' else 'clear')
                    continue
                elif cmd_lower in ["help", "list"]:
                    self.print_quick_list()
                    continue

                # Normalisasi format endpoint
                if not endpoint.startswith("/"):
                    endpoint = "/" + endpoint

                # Eksekusi GET Request
                self.execute_get(endpoint)

            except KeyboardInterrupt:
                print("\n\n[+] Program dihentikan (Ctrl+C). Sampai jumpa!")
                break

    def execute_get(self, endpoint):
        target_url = f"{self.base_url}{endpoint}"
        print(f"[*] Executing: \033[96mGET {target_url}\033[0m")

        try:
            # Memaksa hanya metode GET demi keamanan (Read-Only)
            response = self.session.get(target_url, timeout=5)

            print(f"[*] Status Code: \033[92m{response.status_code}\033[0m")
            print("-" * 70)

            # Coba parsing sebagai JSON
            try:
                json_data = response.json()
                # Print JSON dengan Indentasi agar mudah dibaca
                formatted_json = json.dumps(json_data, indent=2)
                print(formatted_json)
            except ValueError:
                # Jika respon bukan JSON (misal teks biasa/HTML)
                print(response.text[:1000]) # Batasi 1000 karakter pertama

            print("-" * 70 + "\n")

        except requests.exceptions.Timeout:
            print("\033[91m[-] Error: Connection Timeout (Endpoint tidak merespon).\033[0m\n")
        except Exception as e:
            print(f"\033[91m[-] Error Request: {e}\033[0m\n")

    def print_quick_list(self):
        print("\n" + "="*50)
        print("  REKOMENDASI ENDPOINT GET UNTUK DITES:")
        print("="*50)
        print("  • /api/status.system")
        print("  • /api/status.wan.connection")
        print("  • /api/status.wan.stat")
        print("  • /api/status.cellular")
        print("  • /api/status.sim")
        print("  • /api/status.client")
        print("  • /api/status.speedfusion")
        print("  • /api/info")
        print("="*50 + "\n")

if __name__ == "__main__":
    tester = PeplinkAPITester(ROUTER_IP, USERNAME, PASSWORD)
    if tester.login():
        tester.start_interactive_loop()


Fitur & Cara Penggunaan:

  1. Safety First: Skrip mengunci metode request khusus GET saja, sehingga secara teknis tidak mungkin merubah konfigurasi atau merestart unit secara tidak sengaja saat Anda mencoba-coba path API dari dokumentasi Peplink.
  2. Auto-Formatting JSON: Respon JSON mentah dari router akan otomatis diuraikan (pretty-printed) dengan indentasi yang rapi sehingga struktur key-value mudah dibaca.
  3. Menu Bantuan Cepat: Ketik list atau help untuk melihat daftar endpoint populer.
  4. Alur Pengujian:

* Jalankan python peplink_api_tester.py. * Ketik endpoint (misal: /api/status.wan.stat) lalu tekan Enter. * Hasil JSON akan langsung muncul. Anda bisa langsung mengetikkan endpoint berikutnya tanpa perlu restart skrip.

setidakmya berfungsi dulu,

[*] Menghubungkan ke Peplink (192.168.1.1)... [ LOGIN BERHASIL ]

======================================================================
          PEPLINK READ-ONLY (GET) API INTERACTIVE TESTER
======================================================================
Tips:
 1. Masukkan endpoint API yang ingin diuji (contoh: /api/status.system)
 2. Ketik 'help' atau 'list' untuk melihat beberapa contoh endpoint umum.
 3. Ketik 'clear' untuk membersihkan layar terminal.
 4. Ketik 'exit' atau 'quit' untuk keluar dari skrip.

PEPLINK-API-GET > /api/status.system
[*] Executing: GET http://192.168.1.1/api/status.system
[*] Status Code: 200
----------------------------------------------------------------------
{
  "stat": "fail",
  "code": 999,
  "message": "unknown function"
}
----------------------------------------------------------------------

apakah artinya API yang test tidak dikenal atau ?

Pesan "stat": "fail", "code": 999, "message": "unknown function" menunjukkan bahwa koneksi API dan otentikasi/login berhasil 100%, namun path atau nama endpoint yang Anda panggil tidak terdaftar/tidak dikenali di versi Firmware atau API schema router tersebut.


Mengapa Endpoint Tersebut "Unknown"?

  • Aturan Penamaan Endpoint (Gaya Web Admin vs API Native): Beberapa dokumentasi Peplink Firmware 8.x menggunakan struktur URL yang sedikit berbeda untuk modul internalnya. Sebagai contoh, /api/status.system kadang dipeta-ulang menjadi /api/status.sys, /api/info, atau /api/status/system.
  • Variasi Versi Firmware / Model Perangkat: Beberapa endpoint status bersifat spesifik untuk lini hardware tertentu (misalnya endpoint seluler hanya ada di model ber-modem).

Endpoint GET Alternatif yang Pasti Valid untuk Dites

Silakan coba mengetikkan beberapa endpoint standar berikut langsung di prompt PEPLINK-API-GET >:

/api/info
/api/status.wan.connection
/api/status.cellular
/api/status.client


Trik Menemukan Endpoint Pasti Menggunakan Browser (DevTools)

Jika Anda ingin tahu endpoint pasti yang didukung oleh firmware Balance 20X Anda tanpa perlu menebak:

  1. Buka Web Admin Peplink di browser Chrome/Firefox.
  2. Tekan F12 untuk membuka Developer Tools lalu pilih tab Network.
  3. Di filter tab Network, pilih Fetch/XHR.
  4. Klik menu/tab apa saja di Web Admin router (misal tab Status atau Dashboard).
  5. Anda akan melihat daftar panggilan request API internal secara real-time di kolom Name (contoh: status.wan.connection atau info).
  6. Ketik nama tersebut ke dalam skrip peplink_api_tester.py Anda.
sebagai catatan
/api/info
/api/status.cellular

tak dikenal

it's OK
2 lainnya berfungsi!


aha, terimakasih, sekedar info, saya lampirkan

Nah, tangkapan layar Network Tab tersebut menjelaskan semuanya dengan sangat gamblang!

Ternyata Web Admin Peplink untuk firmware/arsitektur ini menggunakan dua pola panggilan internal:

  1. CGI-based Endpoint (api.cgi?func=...): Lihat baris yang bertuliskan api.cgi?func=info.noop&=.... Ini adalah arsitektur bawaan GUI di mana request dikirim ke api.cgi dengan parameter query func=<nama_fungsi>.
  2. Dynamic Polling Query (from?get&nocache=...): Panggilan from?get&... dengan token nocache acak digunakan Web Admin untuk mengambil metrik UI secara real-time.

Cara Mencoba Panggilan Model CGI di Tester Script

Karena backend-nya merespons api.cgi, Anda bisa langsung memasukkan endpoint dengan format query string tersebut ke skrip peplink_api_tester.py:

PEPLINK-API-GET > /cgi-bin/MANGA/api.cgi?func=info.noop

(atau cukup /api.cgi?func=info.noop tergantung lokasi root-nya)


Struktur REST API vs CGI Web Admin

  • /api/status.wan.connection & /api/status.client**: Ini adalah **Official REST API Engine resmi Peplink (didesain untuk integrasi skrip dari luar/third-party). Itulah mengapa 2 endpoint ini langsung sukses.
  • api.cgi?func=...: Ini adalah Internal Web UI Controller yang digunakan oleh halaman browser Web Admin.

Dua endpoint REST API yang sudah berhasil bekerja (/api/status.wan.connection dan /api/status.client) sebenarnya sudah sangat mencukupi untuk kebutuhan otomatisasi QC dan monitoring seluler!

REST API vs CGI Web Admin

bagaimana dengan berbagai API produk SDWAN lain di dunia, apakah sama konsepnya ?

Konsep arsitektur yang Anda temukan di Peplink adalah hal yang sangat umum di industri perangkat jaringan (SD-WAN, routers, firewalls, dan switches).

Hampir seluruh vendor SD-WAN modern bertransformasi dari arsitektur legacy (CGI/Web Controller internal) menuju arsitektur REST API Native (API-First).


Perbandingan Konsep API Vendor SD-WAN Global

Vendor SD-WAN Pendekatan Utama API Mekanisme Otentikasi Karakteristik Arsitektur API
Peplink Hybrid (REST API + Internal CGI) Session Cookie / Token API Endpoint REST (/api/status.*) untuk integrasi luar, dan api.cgi untuk Web UI internal.
Cisco SD-WAN (Viptela) REST API Native (vManage) Session Cookie / Token CSRF Arsitektur API-First mendalam. Semua aksi di Dashboard vManage dipanggil via REST API (/dataservice/*).
Fortinet (FortiGate SD-WAN) REST API Native (FortiOS) API Key Header / Session Cookie Struktur URL sangat konsisten (/api/v2/monitor/* dan /api/v2/cmdb/*).
VMware SD-WAN (Velocloud) REST API / JSON-RPC Token Bearer / Session Menggunakan Orchestrator API (/portal/rest/*) untuk kontrol terpusat seluruh edges.
MikroTik (RouterOS v7) REST API + Native API Protocol Basic Auth / Session RouterOS v7 memperkenalkan REST API standar (/rest/*) menggantikan API port binary/socket lama (port 8728).

Pola Evolusi API Perangkat Jaringan

1. Dual Engine (Arsitektur Transisi / Hybrid)

  • Perangkat lama yang diperbarui firmware-nya (seperti Peplink) sering memiliki dua mesin:
  • Mesin CGI/Web-Controller: Khusus melayani pengolahan interface browser lokal agar ringan.
  • Mesin REST API Engine: Layer tambahan khusus untuk pengembang/skrip luar agar data yang dikembalikan berformat JSON bersih tanpa overhead elemen HTML.

2. API-First Architecture (Trend Modern)

  • Pada produk SD-WAN enterprise modern (seperti Cisco Viptela atau Fortinet), GUI Web Admin hanyalah sebuah aplikasi frontend (Single Page Application).
  • Saat Anda mengeklik tombol di GUI, browser 100% memanggil endpoint REST API resmi yang sama persis dengan yang dipakai oleh skrip Python atau Ansible Anda. Tidak ada lagi CGI tersembunyi.

Pola Endpoint yang Akan Sering Anda Temui

Jika kelak Anda membuat skrip otomatisasi untuk vendor SD-WAN lain, pola dasar endpoint GET mereka akan sangat mirip:

  • Sistem & Informasi Unit: /api/v1/system/info atau /api/v2/monitor/system/status
  • Konektivitas WAN: /api/v1/interfaces/wan atau /dataservice/device/action/status
  • Routing & Tunnel: /api/v1/sdwan/tunnels atau /api/v2/monitor/router/ip-pool

Eksplorasi via Network Tab (F12) yang baru saja Anda lakukan di Peplink tetap menjadi trik paling efektif dan berlaku universal di semua vendor perangkat jaringan di dunia.

file ber ektensi .HAR bisa di buka supaya rapi dengan aplikasi apa ?

File HAR (HTTP Archive) pada dasarnya adalah file berbasis JSON yang mencatat seluruh lalu lintas data (request & response, headers, body, cookies, dan timing) saat browser memuat suatu halaman web.

Agar data di dalamnya terbaca dengan rapi, terstruktur, dan mudah dianalisis, berikut pilihan aplikasi dan tool terbaik yang bisa digunakan:

1. Tool Online (Paling Rapi & Tanpa Install)

  • Google Admin HTTP Archive Viewer (netlog-viewer / HAR Viewer)
  • Situs: [https://toolbox.googleapps.com/apps/har_analyzer/](https://toolbox.googleapps.com/apps/har_analyzer/)
  • Keunggulan: Mengubah isi JSON HAR menjadi tampilan waterfall chart (mirip persis dengan Network Tab di F12 Browser). Sangat rapi untuk menganalisis timing, status code, dan headers.

  • HTTP Archive Viewer oleh Softwareishard

  • Situs: [http://www.softwareishard.com/har/viewer/](http://www.softwareishard.com/har/viewer/)
  • Keunggulan: Visualisasi klasik yang memecah file HAR berdasarkan halaman, request individual, serta respon JSON/HTML.

2. Aplikasi Desktop (Offline & Enterprise)

Aplikasi Platform Keunggulan Utama
Fiddler Everywhere / Fiddler Classic Windows, macOS, Linux Aplikasi standar network debugging. Mampu mengimpor file .har dan menguraikan struktur request/response secara sangat mendalam.
Postman Windows, macOS, Linux File HAR bisa diimpor langsung sebagai Collection. Semua endpoint API yang terekam di file HAR akan otomatis terurai menjadi daftar request yang siap dites kembali.
Charles Proxy Windows, macOS, Linux Mendukung import HAR untuk menganalisis hierarki struktur folder URL dan struktur data payload.

3. Menggunakan Browser Langsung (Built-in DevTools)

Anda tidak perlu menginstall aplikasi tambahan jika sudah memiliki browser di komputer:

  1. Buka Google Chrome, Firefox, atau Edge.
  2. Tekan F12 untuk membuka Developer Tools, lalu pilih tab Network.
  3. Cari ikon Import HAR (biasanya berupa ikon panah mengarah ke atas ↑ atau tombol drag-and-drop).
  4. Masukkan file .har Anda. Browser akan langsung menampilkan kembali seluruh lalu lintas jaringan persis seperti saat file tersebut direkam.

4. Code Editor (Untuk Analisis Mentah)

Jika ingin melihat atau memfilter variabel JSON mentah di dalam file HAR:

  • VS Code: Install ekstensi JSON Viewer atau Pretty JSON, lalu gunakan fitur Format Document (Shift + Alt + F).
ok,
google admin ( online ) berfungsi

jadi sebetulnya, .har ini secara format, mirip atau menyerupai .JSON ya ?

Tepat sekali! File .har bukan cuma menyerupai, tapi secara teknis memang 100% adalah file berformat JSON (JavaScript Object Notation).

Ekstensi .har hanya penanda standar bahwa struktur JSON di dalamnya memiliki skema khusus (HAR Spec) untuk menyimpan data HTTP Archive.


Mengapa Formatnya JSON?

  • Format Teks Terstruktur: Karena pada dasarnya adalah JSON, Anda bisa mengubah ekstensi .har menjadi .json atau membukanya langsung di Notepad, VS Code, atau Text Editor mana pun.
  • Skema Standar W3C: Struktur JSON di dalam .har selalu mengikuti standar elemen berikut:
  • log: Root object.
  • creator & browser: Informasi aplikasi yang merekam.
  • entries: Array utama yang berisi daftar semua request. Di dalamnya ada detail request (URL, Method, Headers, Cookies) dan response (Status, Headers, Content Body).

Cara Membuktikannya di Python

Karena file .har adalah file JSON biasa, Anda bahkan bisa membaca dan memilah API dari file .har menggunakan skrip Python sederhana:

import json

# Buka file .har seperti membaca file .json biasa
with open("peplink_traffic.har", "r", encoding="utf-8") as f:
    har_data = json.load(f)

# Ambil semua URL request yang pernah dipanggil
entries = har_data["log"]["entries"]
for entry in entries:
    url = entry["request"]["url"]
    method = entry["request"]["method"]
    status = entry["response"]["status"]

    # Filter hanya endpoint API
    if "/api/" in url:
        print(f"[{method}] {status} -> {url}")

Jadi, jika Anda mengekspor file .har saat membuka Web Admin Peplink, Anda bisa mengolah file JSON tersebut menggunakan skrip di atas untuk otomatis mencatat semua daftar endpoint API yang pernah dipanggil oleh browser!

bisa dibuatkan agar menanyakan (input) nama file ? agar lebih keren dan fleksibel

Skrip Python di bawah ini dilengkapi dengan prompt input nama file .har, validasi otomatis, serta ekstraksi endpoint /api/ yang rapi.

import json
import os

def parse_har_api():
    print("=" * 60)
    print("      PEPLINK HAR API ENDPOINT EXTRACTOR (PYTHON)      ")
    print("=" * 60)

    # 1. Input nama file secara interaktif
    har_filename = input("Masukkan nama file HAR (contoh: peplink.har): ").strip()

    # Otomatis tambahkan ekstensi .har jika pengguna lupa mengetiknya
    if not har_filename.lower().endswith('.har') and not har_filename.lower().endswith('.json'):
        har_filename += '.har'

    # 2. Validasi keberadaan file
    if not os.path.exists(har_filename):
        print(f"\n[-] Error: File '{har_filename}' tidak ditemukan di folder ini!")
        return

    try:
        print(f"\n[*] Membaca file: {har_filename}...")
        with open(har_filename, "r", encoding="utf-8") as f:
            har_data = json.load(f)

        entries = har_data.get("log", {}).get("entries", [])
        found_endpoints = set()

        # 3. Iterasi & Ekstraksi Endpoint API
        for entry in entries:
            request = entry.get("request", {})
            url = request.get("url", "")
            method = request.get("method", "GET")
            status = entry.get("response", {}).get("status", 0)

            # Filter hanya URL yang mengandung /api/ atau cgi-bin
            if "/api" in url or "cgi-bin" in url:
                found_endpoints.add((method, status, url))

        # 4. Tampilkan Hasil
        print(f"\n[+] Ditemukan {len(found_endpoints)} endpoint API unik:\n")
        print(f"{'METHOD':<8} | {'STATUS':<6} | {'URL ENDPOINT'}")
        print("-" * 60)

        for method, status, url in sorted(found_endpoints):
            print(f"{method:<8} | {status:<6} | {url}")

        print("-" * 60)

    except json.JSONDecodeError:
        print("\n[-] Error: Format file rusak atau bukan file HAR/JSON yang valid.")
        except Exception as e:
        print(f"\n[-] Error tidak terduga: {e}")

if __name__ == "__main__":
    parse_har_api()


Fitur Utama

  • Input Fleksibel: Anda cukup memasukkan nama file (misalnya peplink_lab). Jika lupa mengetik .har, skrip akan otomatis menambahkannya.
  • Auto-Deduplikasi: Menggunakan struktur data set() agar endpoint yang dipanggil berulang kali di Web UI hanya tampil 1 kali.
  • Proteksi Error: Jika file tidak ditemukan atau bukan format JSON/HAR, skrip menampilkan pesan error secara aman tanpa crash.
>python peplinkHAR.py
  File "D:\ParamanNP\LABs\peplinkHAR.py", line 52
    except Exception as e:
    ^^^^^^
SyntaxError: invalid syntax

SyntaxError tersebut terjadi karena ada kesalahan indentasi (spasi) pada blok except Exception as e:. Di Python, baris except harus sejajar (level indentasi yang sama) dengan blok try: di atasnya.


Kode Lengkap yang Sudah Dirapikan (peplinkHAR.py)

Berikut kode yang sudah diperbaiki struktur indentasinya agar dapat langsung dijalankan tanpa error:

import json
import os

def parse_har_api():
    print("=" * 60)
    print("      PEPLINK HAR API ENDPOINT EXTRACTOR (PYTHON)      ")
    print("=" * 60)

    # 1. Input nama file secara interaktif
    har_filename = input("Masukkan nama file HAR (contoh: peplink.har): ").strip()

    # Otomatis tambahkan ekstensi .har jika pengguna lupa mengetiknya
    if not har_filename.lower().endswith('.har') and not har_filename.lower().endswith('.json'):
        har_filename += '.har'

    # 2. Validasi keberadaan file
    if not os.path.exists(har_filename):
        print(f"\n[-] Error: File '{har_filename}' tidak ditemukan di folder ini!")
        return

    try:
        print(f"\n[*] Membaca file: {har_filename}...")
        with open(har_filename, "r", encoding="utf-8") as f:
            har_data = json.load(f)

        entries = har_data.get("log", {}).get("entries", [])
        found_endpoints = set()

        # 3. Iterasi & Ekstraksi Endpoint API
        for entry in entries:
            request = entry.get("request", {})
            url = request.get("url", "")
            method = request.get("method", "GET")
            status = entry.get("response", {}).get("status", 0)

            # Filter hanya URL yang mengandung /api/ atau cgi-bin
            if "/api" in url or "cgi-bin" in url:
                found_endpoints.add((method, status, url))

        # 4. Tampilkan Hasil
        print(f"\n[+] Ditemukan {len(found_endpoints)} endpoint API unik:\n")
        print(f"{'METHOD':<8} | {'STATUS':<6} | {'URL ENDPOINT'}")
        print("-" * 60)

        for method, status, url in sorted(found_endpoints):
            print(f"{method:<8} | {status:<6} | {url}")

        print("-" * 60)

    except json.JSONDecodeError:
        print("\n[-] Error: Format file rusak atau bukan file HAR/JSON yang valid.")
    except Exception as e:
        print(f"\n[-] Error tidak terduga: {e}")

if __name__ == "__main__":
    parse_har_api()

Simpan file di atas, lalu jalankan kembali dengan python peplinkHAR.py. Skrip akan langsung menanyakan nama file .har Anda.

ya, berfungsi

Sip, mantap! Senang mendengar skrip peplinkHAR.py sudah berjalan tanpa error.

Sekarang Anda sudah memiliki toolset lengkap di folder kerja Anda:

  • peplink_qc_monitor.py: Skrip otomatisasi QC & live monitoring seluler (output 2 file CSV).
  • peplink_api_tester.py: Skrip interaktif untuk mencoba-coba endpoint GET secara langsung dan aman.
  • peplinkHAR.py: Skrip ekstraktor untuk membongkar file .har dan mengidentifikasi seluruh URL/endpoint API unik secara otomatis dari Web Admin.

Jika nanti ada kebutuhan untuk mengembangkan skripnya lebih lanjut atau ingin parsing data spesifik dari hasil HAR tersebut, tinggal diskusikan saja. Selamat mengeksplorasi!

apakah fungsi developer pada browser chrome ini , khususnya pada filter "fetch/XHR" juga berguna untuk URL apapun atau bagaimana ?

Secara prinsip, fungsi filter Fetch/XHR di DevTools browser berlaku universal untuk URL website/aplikasi apa pun di dunia, tidak terbatas pada Web Admin Peplink saja.

Selama sebuah situs web menggunakan teknik komunikasi asynchronous (AJAX) untuk mengambil data dari server tanpa perlu reload seluruh halaman, pertukarannya akan selalu terekam di tab Fetch/XHR.


Jenis Situs & Efektivitas Filter Fetch/XHR

  • Single Page Applications (SPA) & Dashboard Modern
  • Situs: Portal Cloud (AWS, Azure, InControl2), Media Sosial (X/Twitter, LinkedIn), E-Commerce (Tokopedia, Shopee), dan Web App (Gmail, Trello).
  • Efektivitas: Sangat Tinggi (100%). Situs-situs ini dibangun dengan framework modern (React, Vue, Angular) yang hampir seluruh pertukaran datanya memanfaatkan REST API / JSON via Fetch/XHR.

  • Web Admin / GUI Router & Firewall Modern

  • Situs: Peplink, Mikrotik WebFiG, Fortinet, Cisco, OpenWrt (LuCI modern).
  • Efektivitas: Sangat Tinggi. Update angka status (seperti grafik bandwidth, sinyal seluler, CPU usage) ditarik terus-menerus lewat pemanggilan XHR/Fetch di latar belakang.

  • Website Statis / Traditional Web (Multi-Page Apps)

  • Situs: Blog berita lama, dokumen HTML polos, atau web sekolah sederhana dari era 2000-an awal.
  • Efektivitas: Rendah. Ketika Anda mengeklik menu di situs jenis ini, browser berpindah halaman dengan memuat ulang seluruh struktur HTML (terekam di tab Doc), bukan mengambil data JSON via XHR/Fetch.

Fungsi Utama Filter Fetch/XHR dalam Praktik

  1. Reverse Engineering & Probing API Memungkinkan Anda mengetahui endpoint rahasia, struktur payload JSON, serta header otentikasi dari situs web mana pun untuk keperluan pembuatan skrip otomatisasi (scraping atau botting).
  2. Troubleshooting & Debugging Memeriksa mengapa sebuah tombol di web tidak merespons. Jika ada kegagalan koneksi backend, Anda bisa melihat HTTP status code error (seperti 401 Unauthorized, 403 Forbidden, atau 500 Internal Server Error) beserta pesan error JSON dari server.
  3. Analisis Performa (Latency) Melihat berapa milidetik (Time to First Byte / TTFB) yang dibutuhkan oleh database backend situs untuk mengembalikan data query ke layar browser Anda.
ok,
kapan-kapan akan coba terutama untuk situs lama dan sebagainya

Sebenarnya karena saya berencana API pada IC2 peplink, ternyata mereka menyediakan referensi contoh nya pada link ini:

https://www.peplink.com/services/software/incontrol-api-for-network-management-solution/

Pilihan yang sangat tepat! Jika API lokal pada Web Admin router berguna untuk on-site monitoring atau pengujian per unit, InControl2 (IC2) API adalah tempat terbaik jika Anda ingin membangun otomatisasi berskala enterprise.

Dengan IC2 API, Anda bisa memantau dan mengelola seluruh armada router Peplink secara terpusat dari cloud tanpa harus terhubung ke IP lokal/VPN masing-masing perangkat.


Perbandingan Karakteristik: Local Router API vs. IC2 Cloud API

Fitur / Parameter Local Router API (/api/*) InControl2 (IC2) Cloud API
Cakupan (Scope) Hanya 1 unit router yang sedang diakses. Seluruh Organization, Group, dan Ratusan Router sekaligus.
Aksesibilitas Harus berada di jaringan LAN yang sama, via VPN, atau Public IP unit. Akses global dari mana saja via internet ([https://m.ic2.peplink.com/api/v1/](https://m.ic2.peplink.com/api/v1/)...).
Otentikasi Username & Password lokal (Session Cookie). OAuth 2.0 Client Credentials atau Client ID & Secret.
Penggunaan Ideal Skrip QC pabrik/lab, monitoring real-time sinyal lokal per detik. Dashboard agregasi data, otomatisasi lisensi/firmware massal, pelaporan bulanan.

Alur Kerja Utama Menggunakan IC2 API

Untuk mulai mencoba-coba API di halaman referensi Peplink tersebut, langkah umum yang akan Anda lalui adalah:

  1. Buat API Client di InControl2:

* Masuk ke portal InControl2 → navigasi ke Organization Settings → API Key / Client. * Buat Client ID dan Client Secret baru (serta atur hak aksesnya, misal Read-Only).

  1. Dapatkan Access Token (OAuth 2.0):

* Skrip Python Anda akan mengirimkan Client ID & Secret ke endpoint otentikasi IC2 untuk mendapatkan access_token.

  1. Eksekusi Endpoint GET Data:

* Gunakan access_token tersebut pada Header HTTP (Authorization: Bearer <TOKEN>) setiap kali memanggil data, misalnya: * Mengambil daftar seluruh Group di Organization. * Mengambil daftar semua serial number beserta status online/offline-nya. * Mengambil riwayat penggunaan bandwidth atau cellular usage report kolektif.


Tips Pengembangan

Karena IC2 API menggunakan standar RESTful modern yang sangat rapi, Anda bisa merekam request dari dashboard Web IC2 menggunakan DevTools (Fetch/XHR) atau mengekspornya ke HAR/Postman Collection persis seperti metode yang baru saja Anda pelajari!

Jika nanti Anda sudah siap mencoba membuat skrip integrasi IC2 dengan Python, kita bisa buatkan skrip modul otentikasi OAuth 2.0 sederhananya bersama-sama.