Autonomous System atau yang disingkat AS adalah suatu kelompok yang terdiri dari satu atau lebih IP Prefix yang terkoneksi yang dijalankan oleh satu atau lebih operator jaringan dibawah satu kebijakan routing yang didefinisikan dengan jelas.

Sebagai pemilik website mungkin kita ingin menerapkan kebijakan kebijakan kebijakan tertentu misalnya hanya ASN ASN tertentu yang bisa mengakses website.

Kita juga bisa membuat tools website untuk mengecek AS Number client. Pada artikel ini tkjpedia akan mencoba menggunakan GeoLite2db gratisan pada PHP.

GeoLite2 merupakan database geolokasi IP Address yang tersedia secara gratis. Ada beberapa metode untuk mengakses nya, bisa menggunakan web service atau bisa juga menggunakan file database. Kali ini kita coba dulu menggunakan database.

Prasyarat

  1. Memiliki akun maxmind
    Jika belum punya silahkan daftar dulu pada halaman berikut: https://www.maxmind.com/en/geolite2/signup
  2. Sudah terinstall PHP dan Webserver, disini tkjpedia menggunakan xampp pada windows
  3. Sudah menginstall composer
  4. Mengerti dasar dasar PHP

Opsional

  1. Jika ingin digunakan untuk umum, kalian bisa menyiapkan hosting / vps / ip publik dan server untuk ngehost file php yang nanti kita buat.

Langkah Langkah Menggunakan GeoLite2 Database

Menyiapkan Database

Unduh GeoLite2 Database ASN pada halaman akun

Siapkan folder dan ekstrak file GeoLite2 Database yang tadi sudah kita unduh.

Menyiapkan File PHP

Install dependensi geoip2 menggunakan composer

Jika belum install composer, bisa ikuti langkah langkah pada artikel berikut

PS D:\belajar\geolite2\asn> composer require geoip2/geoip2:~2.0
./composer.json has been created
Running composer update geoip2/geoip2
Loading composer repositories with package information
Updating dependencies
Lock file operations: 4 installs, 0 updates, 0 removals
  - Locking composer/ca-bundle (1.3.1)
  - Locking geoip2/geoip2 (v2.12.2)
  - Locking maxmind-db/reader (v1.11.0)
  - Locking maxmind/web-service-common (v0.8.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Installing composer/ca-bundle (1.3.1): Extracting archive
  - Installing maxmind/web-service-common (v0.8.1): Extracting archive
  - Installing maxmind-db/reader (v1.11.0): Extracting archive
  - Installing geoip2/geoip2 (v2.12.2): Extracting archive
2 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
PS D:\belajar\geolite2\asn>

Buat file php menggunakan teks editor kesayangan kalian, disini tkjpedia menggunakan vscode.

<?php
require_once 'vendor/autoload.php';

use GeoIp2\Database\Reader;

// This creates the Reader object, which should be reused across
// lookups.
$reader = new Reader('GeoLite2-ASN.mmdb');

// Replace "city" with the appropriate method for your database, e.g.,
// "country".
$record = $reader->asn('95.111.196.27');

var_dump($record);

Lalu coba jalankan menggunakan terminal

Maka akan terbaca untuk IP 95.111.196.27 merupakan ASN dari Upcloud. Kalian bisa mencoba IP lainnya.

Jika kita sudah mengetahui parameter parameter nya maka bisa kita lakukan print saja.
Ganti var_dump tadi dengan print

print("AS Number : " . $record->autonomousSystemNumber . "\n");
print("AS Organization : " . $record->autonomousSystemOrganization . "\n");
print("IP Address : " . $record->ipAddress . "\n");
print("IP Network : " . $record->network . "\n");

Coba lagi menggunakan terminal

Coba menggunakan browser dengan menambah html tag br untuk menambah spasi

print("AS Number : " . $record->autonomousSystemNumber . "\n");
echo "</br>";
print("AS Organization : " . $record->autonomousSystemOrganization . "\n");
echo "</br>";
print("IP Address : " . $record->ipAddress . "\n");
echo "</br>";
print("IP Network : " . $record->network . "\n");

Gimana agar dinamis, IP Address sesuai client yang mengakses

Sesuaikan $record = $reader->asn($ip); pada kode dibawah ini dan tambahkan $ip = $_SERVER[‘REMOTE_ADDR’]; untuk mengambil ip client.

<?php
require_once 'vendor/autoload.php';

use GeoIp2\Database\Reader;

// This creates the Reader object, which should be reused across
// lookups.
$reader = new Reader('GeoLite2-ASN.mmdb');

$ip = $_SERVER['REMOTE_ADDR'];

// Replace "city" with the appropriate method for your database, e.g.,
// "country".
$record = $reader->asn($ip);

print("AS Number : " . $record->autonomousSystemNumber . "\n");
echo "</br>";
print("AS Organization : " . $record->autonomousSystemOrganization . "\n");
echo "</br>";
print("IP Address : " . $record->ipAddress . "\n");
echo "</br>";
print("IP Network : " . $record->network . "\n");

Ternyata, saat kita akses melalui browser malah error, wah…

Ini disebabkan karena IP address 127.0.0.1 atau localhost tidak ada di dalam database dari GeoLite2.
Solusinya bisa coba deploy ke hosting / vps dan kita coba akses

Menyiapkan Hosting

Disini saya sudah menyiapkan hosting nya, pada saat artikel ini dibuat bisa diakses melalui ipv4.tkjpedia.com

Rename tes.php menjadi index.php kemudian compress menjadi .zip dan upload ke hosting untuk di ekstrak pada folder publik

Pengujian

Saya coba tes menggunakan wifi di rumah hasilnya seperti ini

Ketika menggunakan tethering hotspot hasilnya seperti ini

Selamat mencobaaa…