Pencarian

Minggu, 17 Juni 2012

User Hotspot Mikrotik dengan PHP API Part I

Menyempatkan diri untuk menulis artikel setelah sekian lama ini disibukkan dengan pekerjaan.
Saya akan berbagi bagaimana caranya membuat User Hotspot Mikrotik menggunakan PHP.
Memang selama beberapa bulan belakangan ini hotspot di lingkungan kampus saya tidak menggunakan limit perclient, saya dan rekan saya lebih memilih menggunakan Queue PCQ agar penggunaan bandwidth lebih optimal dan tidak membatasi untuk aktivitas download maupun browsing, saya hanya menambahkan sedikit QoS sederhana. Tapi ternyata hal ini menimbulkan dampak lain, yaitu IDM atau download manager yang terlalu banyak mendominasi bandwidth dan tidak tertibnya penggunaan jaringan internet. Pertimbangan konfigurasi diatas saya buat agar mahasiswa lebih mudah memperoleh akses internet, tinggal terkoneksi lalu on internet.

Dan seperti biasa, kemudahan selalu berdampak lain pada keamanan, yaitu keamanan pengguna lain yang tidak kebagian bandwidth ketika ada yang menggunakan IDM :D.

Akhirnya ada sedikit ide sederhana, menggunakan login hotspot mikrotik yang di kombinasikan dengan database mahasiswa. Jadi setiap orang yang ingin menggunakan jaringan hotspot harus terdaftar dulu sebagai mahasiswa stikom-db. Kesulitan yang jelas adalah saya dan rekan-rekan harus rela untuk repot-repot membuat user hotspot satu persatu melalui mekanisme pendaftaran. Jadi mahasiswa yang ingin menggunakan hotspot harus mendaftar dulu kemudian baru dibuatkan usernya berdasarkan NIM.

Dan teknologi itu ada untuk membantu serta mempermudah pekerjaan manusia :D. Setelah browsing-browsing di internet saya menemukan API (Application Programming Interface) PHP di mikrotik http://wiki.mikrotik.com/wiki/API_PHP_class. Dan saya berpikir untuk tidak menggunakan mekanisme  pendaftaran secara manual. Saya cukup membuat link pendaftaran di login hotspot lalu membuat script php sederhana yang berfungsi sebagai tempat pendaftaran, pada proses pendaftaran script php yang saya buat akan melakukan pengecekkan NIM dari mahasiswa apakah sesuai dengan NIM yang ada di bagian akademik, jika sesuai maka script akan menggunakan API untuk membuat user hotspot.

Basa-basinya selesai, masuk ke bagian koding hehehe...

Di login hotspot mikrotik yang sudah saya desain saya tambahkan link pendaftaran sebagai berikut:
<script type="text/javascript">
function PopupCenter(pageURL, title,w,h) {
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var targetWin = window.open (pageURL, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
}
</script>
<a href="javascript:void[0]"><blink>DAFTAR LOGIN HOTSPOT</blink></a>
Tentu sebelumnya domain reghotspot.stikom-db.net tersebut saya bypass/allow di bagian Walled Garden hotspot mikrotik dengan tujuan domain tersebut bisa diakses client tanpa harus login terlebih dahulu.

Untuk index.php sebagai berikut :

<?php
include "config.php";
include "api.php";
$alert = htmlspecialchars($_GET['alert']);
?>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<script type="text/javascript" src="js/jquery-1.5.2.js"></script>
 <script type="text/javascript">
$(document).ready(function() {
setInterval (function () {
    $("#pesan_error:eq(0)").fadeOut ("slow").next ("#pesan_error");
}, 3000);
$("#fullname").focus();
  $("#form1").validate({
    messages: {
      email: {
        required: "E-mail harus diisi",
        email: "Masukkan E-mail yang valid"
      }
    },
    errorPlacement: function(error, element) {
      error.appendTo(element.parent("td"));
    }
  });
})
</script>
<?php
  if($alert != ""){
  echo "<div id=pesan_error>".ucfirst($alert)."</div>";
  }
?>
<div id="menu">
  <b><font size="3">PENDAFTARAN LOGIN HOTSPOT STIKOM DINAMIKA BANGSA JAMBI</font></b>
  <BR /><BR />
      <form action="proses.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="570" border="0">
    <tr >
<td width="80" >Nama Lengkap</td>
<td width="260"><input type="text" name="fullname" size="43" value="" id="fullname"/>
</td>
</tr>
    <tr>
      <td height="33">NIM</td>
      <td >
        <input type="text" name="nim" id="myInput" size="43" value="" /></td>
    </tr>
<tr >
  <td>Password</td>
<td>
<input type="password" name="password" style="width:250px;" value="" />
</td>
</tr>
<tr >
  <td>Konfirmasi</td>
<td>
<input type="password" name="cpassword" style="width:250px;" value="" />
</td>
    </tr>
 <tr >
<td>Email</td>
<td><input type="text" name="email" size="43" value="" />
</td>
</tr>
    <tr>
      <td height="34"><input type="submit" id="submit" name="Submit" value="Daftar" class="button" /></td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</div>

Terdapat 2 file yang saya includekan pada script diatas, file config.php berisi koneksi database biasa, file api.php berisi class API  PHP yang bisa didapat disini http://wiki.mikrotik.com/wiki/API_PHP_class

Lalu file proses.php sebagai berikut :

<?php
include "config.php";
require('api.php');
$fullname = htmlspecialchars($_POST['fullname']);
$nim = $_POST['nim'];
$passwd = htmlspecialchars($_POST['password']);
$cpasswd = htmlspecialchars($_POST['cpassword']);
$email = htmlspecialchars($_POST['email']);
if($fullname == "" || $nim == "" || $passwd == "" || $cpasswd == "" || $email == ""){
header("location:./index.php?alert=Silahkan diisi dengan benar");
exit;
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
header("location:./index.php?alert=E-mail tidak valid");
exit;
}
if($passwd != $cpasswd){
header("location:./index.php?alert=Password tidak benar");
exit;
}
?>
<script type="text/javascript">
function closeWin(){
window.close();
}
</script>
<?php
//proses pengecekkan nim yang di input mahasiswa apakah sesuai //dengan nim yang ada di database akademik
$cek_real_nim = mysql_query("select *from mahasiswa where nim = '$nim'") or die (mysql_error());
if(mysql_num_rows($cek_real_nim) == 0){
header("location:./index.php?alert=NIM tidak terdaftar");
exit; }
//cek email terdaftar
$cek_email = mysql_query("select *from tuser where email = '$email'") or die (mysql_error());
if(mysql_num_rows($cek_email) != 0){
header("location:./index.php?alert=Email sudah terdaftar");
exit;
}
//cek nim di tabel user, tabel ini berguna untuk melihat daftar //user dimana nanti user di tabel ini bisa diupdate dan di delete //tanpa mengganggu database mahasiswa di akademik
$passwd = MD5($passwd);
$cek_nim = mysql_query("select *from tuser where nim = '$nim'") or die (mysql_error());
if(mysql_num_rows($cek_nim) == 0){
$query = mysql_query("insert into tuser values (0,'$nim','$passwd','$fullname','$email')") or die (mysql_error());
//membuat objek api
$API = new routeros_api();
//jika ingin melihat output dari API di set true
$API->debug = false;
//koneksi ke mikrotik, user disini bukan user hotspot, tapi user login ke mikrotik
if ($API->connect('192.168.5.1', 'UserUntukLoginMikrotik', 'passwordUntukLogin')) {   // Change this as necessery
    $user = array(1 => array('name' => "$nim", 'password' => "$passwd"),
 );
foreach($user as $tmp)
{
$username="=name=";
$username.=$tmp['name'];
$pass="=password=";
$pass.=$tmp['password'];
$server="=server=";
$server.='all';
$profile="=profile=";
$profile.='mahasiswa';
  $API->write('/ip/hotspot/user/add',false);
  $API->write($username, false);
  $API->write($pass, false);
  $API->write($server, false);
$API->write($profile);
$ARRAY = $API->read();
}
echo "<center>";
echo "Anda sudah terdaftar di Hotspot STIKOM Dinamika Bangsa Jambi : <br /> Username : $nim <br /> Password : $passwd <br />";
echo "<input type=button name=tutup id=tutup onclick='closeWin()' value=Tutup />";
echo "</center>";
    $API->disconnect();
}
}else{
header("location:./index.php?alert=Nim Anda sudah terdaftar");
exit; }
?>
Lalu aktifkan API di mikrotik yang terdapat di bagian
IP -> Services, Aktifkan API.

Selanjutnya tinggal di setting hotspot seperti biasa, pada script API diatas berarti ada user profile untuk mahasiswa.
Dan sekarang tinggal nunggu router baru, agar user  hotspot bisa lebih banyak, RB yang saya gunakan level 4, jadi masih terbatas usernya, Mikrotik RoS memang Ok.
Tulisannya sampai disini dulu, ntar disambung lagi....

13 komentar:

  1. Salam bro....
    terima kasih... Bagaimana untuk dosen dan karyawan yang mau menggunakan hotspot juga....?

    BalasHapus
    Balasan
    1. kan tinggal buat saja satu user di mikrotik hotspotnya yang bisa di gunakan oleh beberapa dosen dan karyawan (saya rasa nggak perlu regis).

      Hapus
  2. Salam nanya....
    yang di jelsakan diataskn penggunaan database tetap menggunakan databasenya mikrotik, fungsi database dari web server hanya mencocokan saja data user bersangkutan, nah klo database mikrotiknya di load dari external mikrotik gmna gan??? mohon petunjuknya gan....

    BalasHapus
    Balasan
    1. Untuk cara itu mungkin bisa menggunakan radius server mas,.. beberapa hari yang lalu udah coba, server radiusnya menggunakan database MySql di linux ubuntu, cm belum sempat nulis :D

      Hapus
    2. Ditunggu gan Tulisanya buat referensi, ngarep.com....

      Hapus
  3. kalau untuk dipasang di server hosting bagai mana untuk setting koneksi ke miktoik lokalnya mas ?

    Saya coba Hasilnya seperti ini

    Server Not Found !!

    Warning: fclose() expects parameter 1 to be resource, boolean given in /home/sdodads3/public_html/mikrotik/routeros_api.class.php on line 120



    terima kasih seblemumnya

    BalasHapus
  4. salam kenal,,,
    mas admin,,,
    aku pnnya studi kasus,,,aku da buat Hotspot buat masiswa,,
    tapi sekarang aku binggung bagaimana kita bisa buat cara aksesnya menggunakan NIM dan namanya untuk login,,,
    apa lagi masiswa banyak,,,
    apa gitu buat userx satu persatu????

    BalasHapus
    Balasan
    1. liat contoh diatas, di kasus saya, setiap mahasiswa mendaftar hotspot menggunakan akun yang ada di database akademik.

      Hapus
  5. salam kenal mas admin, saya sangat tertarik dengan informasi ini. Kebetulan saya juga mengalami hal serupa di sekolah yang saya kelola saat ini. Saya sangat perlu informasi lengkap mengenai cara implementasi "User Hotspot Mikrotik dengan PHP API" ini. Jika mas admin tidak keberatan, mas admin bisa berbagi informasi via email: sang_penghuni@yahoo.co.id. Terimakasih sebelumnya...

    BalasHapus
  6. admin aku mau bayar untuk dibuatkan seperti contoh diatas...ini email ku cesc330@gmail.com

    BalasHapus
  7. Dalam studi kasus ente kan pake database akademik, nah untuk kita sendiri jika ingin mengikuti tutorial diatas bagaimana untuk pengecekan user'nya?
    terima kasih untuk postingannya.

    BalasHapus
  8. salam kenal mas admin,mau tanya dalam kasus ini file api.php dan config.php itu diletakkan dimana ya?apakah di dalam file mikrotik(hotspot)? atau di buatkan server localhost sendiri.

    terima kasih

    BalasHapus