Membaca MAC Address menggunakan Javascript


Media Access Control (MAC) address adalah sebuah nomor unik yang digunakan oleh Network Adapter. MAC address menggunakan angka hexadecimal sebanyak 12 digit (48 bits). MAC address menggunakan format MM:MM:MM:SS:SS:SS atau MM-MM-MM-SS-SS-SS. MM adalah Id yang menunjukan id pabrikan pembuat network adapter, sedangkan SS adalah nomor seri produk. Perbedaannya MAC address dengan IP Address adalah jika MAC Address berada dalam layer data link , IP Address berada dalam layer network dalam arsitektur jaringan OSI Model.

Untuk mengetahui MAC address sebuah komputer yang menggunakan sistem operasi Windows, bisa menggunakan perintah ipconfig /all pada command prompt. Seperti yang ditunjukan pada gambar MAC address untuk komputer yang bernama “brontoseno” adalah 00-30-84-27-0A-04.

Adakalanya dalam sebuah aplikasi yang berbasis web untuk menambah keamanan sebuah aplikasi, kita perlu untuk membaca MAC Address komputer client. Katakanlah dalam beberapa kasus tertentu dimana sebuah aplikasi web hanya boleh diakses oleh beberapa komputer yang sudah terdaftar. Meskipun hal ini tidak menjamin 100% aman, namun cara ini bisa dijadikan sebagai salah satu alternatif untuk mengatasi masalah keamanan aplikasi.

Target pembaca untuk artikel ini adalah minimal mengerti dasar-dasar HTML (tag, form), terbiasa (minimal pernah) menggunakan browser IE, mengerti konsep dasar jaringan komputer.

Sebenarnya bukan javascript yang akan kita gunakan, namun varian dari javascript yang dikembangkan oleh Microsoft yaitu JScript. Ya..kita akan menggunakan JScript dan activeX. Konsekuensinya pembacaan MAC address dengan browser ini hanya bisa digunakan pada sistem operasi Ms. Windows dengan menggunakan Internet Explorer sebagai browsernya. Mengapa harus browser Internet Explorer pada windows? karena kita akan menggunakan komponen ActiveX & JScript (kok bulet tho hee..). Apakah bisa juga dijalankan menggunakan browser IE pada Macintosh? Saya tidak punya komputer Apple, jadi jika diantara pembaca yang memiliki komputer apple silahkan di share pengalaman anda di sini.

Sebelum kita membahas bagaimana detil implementasinya, lebih dulu kita akan berkenalan dengan seseorang eh…sesuatu yang berinisial WMI. Windows Management Intrumentation atau WMI adalah komponen dalam sistem operasi windows yang menyediakan informasi manajemen (tentunya bukan manajemen pengelolaan kinerja perusahaan yang juga saya tulis dalam blog ini, namun informasi manajemen sistem operasi) dan kontrol. WMI menggunakan standar industri yang memperbolehkan user/manager untuk melakukan query dan setting informasi pada desktop system, aplikasi, network dan komponent enterprise yang lain. Pengembang perangkat lunak bisa memanfaatkanya untuk membuat aplikasi monitoring yang memperingatkan user jika suatu event terjadi.

Sebuah aplikasi dapat berkomunikasi dengan WMI menggunakan berbagai interface seperti Visual basic, C++, ODBC dan activeX. Komunikasi tersebut menggunakan interface component object model (COM). WMI menyimpan data dalam bentuk Common Information Model (CIM). WMI mengambil informasi dari berbagai sumber daya seperti hardware, registry dan lain-lain. Arsitektur WMI terdiri dari 2 bagian, yaitu: Management infrastructure didalamnya terdapat CIM Object Manager yang menyediakan akses yang sama ke manajemen data dan sebuah pusat area penyimpanan data manajemen yang dinamakan CIM Object Manager Repository. Selanjutnya adalah WMI Providers yang merupakan perantara antara CIM Object Manager dengan Managed Object. Dengan menggunakan WMI API, WMI providers menyediakan data dari managed object ke CIM Object Manager, menghandle request dari aplikasi dan mengenerate sebuah event (Untuk lebih detail silahkan baca MSDN Library).

Kembali ketopik, kita memerlukan dua objek WMI yaitu SWbemSink dan SWbemLocator. SWbemSink digunakan oleh aplikasi client untuk menerima hasil dari operasi asynchronous dan notifikasi event sedangkan SWBemLocator digunakan untuk memperoleh sebuah object SWBemServices (yaitu sebuah object yang merupakan koneksi namespace pada komputer lokal atau remote host). Pada script HTML Object SWBemLocator diregistrasi sebagai berikut:

<OBJECT id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" viewastext=""/>

Sedangkan object SWBemSink diregistrasi sebagai berikut:

<OBJECT viewastext="" classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223" id="foo" />

Selanjutnya dengan menggunakan JScript kita perintahkan SWBemLocator membuka koneksi ke server dengan perintah ConnectServer([strServer=””],[strNameSpace=””], [strUser=””], [strPassword=””], [strLocale=””], [strAuthority=””], [iSecurityFlags=0], [objwbemNamedValueSet=null]), namun karena kita akan membuka koneksi ke local komputer maka cukup dengan perintah ConnectServer() tanpa argumen. Selanjutnya adalah dengan menggunakan SWbemLocator kita meminta instance dari konfigurasi Network Adapter. Kode selengkapnya sebagai berikut:

<SCRIPT language=”JScript”>
//Connect ke lokal komputer
var service = locator.ConnectServer();
//set level security
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, ‘Win32_NetworkAdapterConfiguration’);
</SCRIPT>

Selanjutnya adalah menghandle event jika operasi diatas sudah selesai. Ada 2 event yang perlu dihandle disini yaitu event OnCompleted() dan OnObjectReady(). Selengkapnya adalah sebagai berikut:

<script FOR=”foo” EVENT=”OnCompleted(hResult,pErrorObject, pAsyncContext)” LANGUAGE=”JScript”> document.forms[0].txtMAC.value=unescape(MACAddr);
</script>
<script FOR=”foo” EVENT=”OnObjectReady(objObject,objAsyncContext)” LANGUAGE=”JScript”>
if(objObject.IPEnabled != null && objObject.IPEnabled != “undefined” && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != “undefined”)
MACAddr = objObject.MACAddress;
}
</script>

Pada HTML form kita sediakan textbox untuk menampilkan MAC address komputer lokal. Kode keseluruhan dari potongan-potongan kode diatas ditunjukan pada baris program yang ada dibawah ini:

<HTML>
<HEAD>
<title>MAC Address</title>
<script FOR=”foo” EVENT=”OnCompleted(hResult,pErrorObject, pAsyncContext)” LANGUAGE=”JScript”>
document.forms[0].txtMAC.value=unescape(MACAddr);
</script>
<script FOR=”foo” EVENT=”OnObjectReady(objObject,objAsyncContext)” LANGUAGE=”JScript”>
if(objObject.IPEnabled != null && objObject.IPEnabled != “undefined” && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != “undefined”)
MACAddr = objObject.MACAddress;
}
</script>
</HEAD>
<body>
<OBJECT id=”locator” classid=”CLSID:76A64158-CB41-11D1-8B02-00600806D9B6″ VIEWASTEXT>
</OBJECT>
<OBJECT id=”foo” classid=”CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223″ VIEWASTEXT/>
</OBJECT>
<script LANGUAGE=”JScript”>
var service = locator.ConnectServer();
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, ‘Win32_NetworkAdapterConfiguration’);
</script>
<form id=”Form1″ method=”post”>
<label for=”txtMAC” name=”labelMac”>MAC Address</label>
<INPUT type=”text” id=”txtMAC”>
</form>
</body>
</HTML>

Kode html diatas akan menampilkan MAC Address dari komputer lokal. Salah satu penggunaannya bisa sebagai tambahan validasi selain login dengan mencocokan MAC address komputer client dengan MAC address yang sudah terdaftar pada server sehingga hanya komputer yang sudah terdaftar saja yang memiliki ijin untuk mengakses aplikasi. Tampilan dari kode program diatas adalah seperti ditunjukan pada gambar dibawah. Namun sebelum ditampilkan akan ada peringatan yang berisi “an activeX control on this page might unsafe to interact … “, klik tombol “yes” untuk menjalankan activeX.

Rujukan:

  1. VelocityReviews
  2. MSDN Library Platform SDK: Windows Management Instrumentation

>VelocityReviews

  • MSDN Library Platform SDK: Windows Management Instrumentation
  • technorati tags:, , , , , ,

    Blogged with Flock

    7 thoughts on “Membaca MAC Address menggunakan Javascript

    1. Perlu diketahui bahwa property MACAddress dari Class WMI Win32_NetworkAdapterConfiguration hanya readonly, jadi tidak bisa digunakan untuk merubah MACAddress.

      Tapi barangkali ada yg sudah pernah bisa mencobanya dengan menggunakan cara yang lainnya? Boleh dong dishare pengalamannya…

    Tinggalkan Balasan

    Isikan data di bawah atau klik salah satu ikon untuk log in:

    Logo WordPress.com

    You are commenting using your WordPress.com account. Logout / Ubah )

    Gambar Twitter

    You are commenting using your Twitter account. Logout / Ubah )

    Foto Facebook

    You are commenting using your Facebook account. Logout / Ubah )

    Foto Google+

    You are commenting using your Google+ account. Logout / Ubah )

    Connecting to %s