Ngoprek MikroTik Api Client Berbasis Python


Okeh, jika anda ingin menjadi pengembang MikroTik API client sepertinya anda perlu mencoba MikroTik API client berbasis python untuk melakukan reverse engineering. Langkah ini diperlukan untuk mengetahui setiap inputan dan hasilnya…

Okeh script ini ane ambil dari http://wiki.mikrotik.com/wiki/Manual:API pada bagian paling bawah, berikut ini  scriptnya :

#!/usr/bin/python

import sys, posix, time, md5, binascii, socket, select

class ApiRos:
    "Routeros api"
    def __init__(self, sk):
        self.sk = sk
        self.currenttag = 0

    def login(self, username, pwd):
        for repl, attrs in self.talk(["/login"]):
            chal = binascii.unhexlify(attrs['=ret'])
        md = md5.new()
        md.update('\x00')
        md.update(pwd)
        md.update(chal)
        self.talk(["/login", "=name=" + username,
                   "=response=00" + binascii.hexlify(md.digest())])

    def talk(self, words):
        if self.writeSentence(words) == 0: return
        r = []
        while 1:
            i = self.readSentence();
            if len(i) == 0: continue
            reply = i[0]
            attrs = {}
            for w in i[1:]:
                j = w.find('=', 1)
                if (j == -1):
                    attrs[w] = ''
                else:
                    attrs[w[:j]] = w[j+1:]
            r.append((reply, attrs))
            if reply == '!done': return r

    def writeSentence(self, words):
        ret = 0
        for w in words:
            self.writeWord(w)
            ret += 1
        self.writeWord('')
        return ret

    def readSentence(self):
        r = []
        while 1:
            w = self.readWord()
            if w == '': return r
            r.append(w)

    def writeWord(self, w):
        print "<<< " + w         self.writeLen(len(w))         self.writeStr(w)     def readWord(self):         ret = self.readStr(self.readLen())         print ">>> " + ret
        return ret

    def writeLen(self, l):
        if l < 0x80:
            self.writeStr(chr(l))
        elif l < 0x4000:             l |= 0x8000             self.writeStr(chr((l >> 8) & 0xFF))
            self.writeStr(chr(l & 0xFF))
        elif l < 0x200000:             l |= 0xC00000             self.writeStr(chr((l >> 16) & 0xFF))
            self.writeStr(chr((l >> 8) & 0xFF))
            self.writeStr(chr(l & 0xFF))
        elif l < 0x10000000:             l |= 0xE0000000             self.writeStr(chr((l >> 24) & 0xFF))
            self.writeStr(chr((l >> 16) & 0xFF))
            self.writeStr(chr((l >> 8) & 0xFF))
            self.writeStr(chr(l & 0xFF))
        else:
            self.writeStr(chr(0xF0))
            self.writeStr(chr((l >> 24) & 0xFF))
            self.writeStr(chr((l >> 16) & 0xFF))
            self.writeStr(chr((l >> 8) & 0xFF))
            self.writeStr(chr(l & 0xFF))

    def readLen(self):
        c = ord(self.readStr(1))
        if (c & 0x80) == 0x00:
            pass
        elif (c & 0xC0) == 0x80:
            c &= ~0xC0
            c <<= 8
            c += ord(self.readStr(1))
        elif (c & 0xE0) == 0xC0:
            c &= ~0xE0
            c <<= 8
            c += ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
        elif (c & 0xF0) == 0xE0:
            c &= ~0xF0
            c <<= 8
            c += ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
        elif (c & 0xF8) == 0xF0:
            c = ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
            c <<= 8
            c += ord(self.readStr(1))
        return c

    def writeStr(self, str):
        n = 0;
        while n < len(str):
            r = self.sk.send(str[n:])
            if r == 0: raise RuntimeError, "connection closed by remote end"
            n += r

    def readStr(self, length):
        ret = ''
        while len(ret) < length:
            s = self.sk.recv(length - len(ret))
            if s == '': raise RuntimeError, "connection closed by remote end"
            ret += s
        return ret

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((sys.argv[1], 8728))
    apiros = ApiRos(s);
    apiros.login(sys.argv[2], sys.argv[3]);

    inputsentence = []

    while 1:
        r = select.select([s, sys.stdin], [], [], None)
        if s in r[0]:
            # something to read in socket, read sentence
            x = apiros.readSentence()

        if sys.stdin in r[0]:
            # read line from input and strip off newline
            l = sys.stdin.readline()
            l = l[:-1]

            # if empty line, send sentence and start with new
            # otherwise append to input sentence
            if l == '':
                apiros.writeSentence(inputsentence)
                inputsentence = []
            else:
                inputsentence.append(l)

if __name__ == '__main__':
    main()

Simpan file diatas dengan nama routeros.py, dan untuk menjalankan nya masukan perintah berikut ini :

chmod 777 routeros.py
python routeros.py 192.168.88.1 admin admin

jika login anda benar maka akan muncul hasil seperti dibawah ini :

<<< /login
<<<  >>> !done
>>> =ret=3febe34367f76733cbece5c7822ebf7c
>>>
<<< /login
<<< =name=admin
<<< =response=0043af609b070655d06d5c1a7984377b6f
<<<  >>> !done
>>>

dan jika password anda salah maka akan tampil pesan berikut ini :

<<< /login
<<<  >>> !done
>>> =ret=8b5b3964ffd9422d920b6497960bfddd
>>>
<<< /login
<<< =name=admin
<<< =response=00f3f3219cdea9fc3861b19551f3457af6
<<<  >>> !trap
>>> =message=cannot log in
>>>
>>> !done
>>>

Okey, sekarang mari mencoba menampilakan semua interface pada mikrotik dengan MikroTik API client berbasis python ini. Ketik perintah dibawah ini dan ketik enter :

/interface/print

pada laptop ane muncul nya seperti ini,:

/interface/print

<<< /interface/print
<<<  >>> !re
>>> =.id=*1
>>> =comment=
>>> =name=ether1
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*2
>>> =comment=
>>> =name=ether2
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*3
>>> =comment=
>>> =name=ether3
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*4
>>> =comment=
>>> =name=ether4
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*5
>>> =comment=
>>> =name=ether5
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*6
>>> =comment=
>>> =name=vlan1
>>> =mtu=1500
>>> =type=vlan
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*7
>>> =comment=
>>> =name=vrrp1
>>> =mtu=1500
>>> =type=vrrp
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*8
>>> =comment=
>>> =name=vlan2
>>> =mtu=1500
>>> =type=vlan
>>> =dynamic=false
>>> =running=true
>>>
>>> !done
>>>

bagaimana dengan laptop anda…..??? pengen tau, coba aja di ketik …
Okey, kalau laptop ane, ada banyak interface yang sudah di add, jadi untuk memilih interface secara spesifik ketik perintah berikut :

/interface/print
?=type=vlan

Hasilnya anda akan menampilkan interface yang type vlan saja, berikut ini hasilnya :

/interface/print
?=type=vlan

<<< /interface/print
<<< ?=type=vlan
<<<  >>> !re
>>> =.id=*6
>>> =comment=
>>> =name=vlan1
>>> =mtu=1500
>>> =type=vlan
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*8
>>> =comment=
>>> =name=vlan2
>>> =mtu=1500
>>> =type=vlan
>>> =dynamic=false
>>> =running=true
>>>
>>> !done
>>>

Okeh, sekarang bagaimana kalau ingin menampilkan interface ether1 dan ether2? coba ketik perintah berikut ini :

/interface/print
?=name=ether1
?=name=ether2
?#|

Hasilnya akan seperti ini :

<<< /interface/print
<<< ?=name=ether1
<<< ?=name=ether2
<<< ?#|
<<<  >>> !re
>>> =.id=*1
>>> =comment=
>>> =name=ether1
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*2
>>> =comment=
>>> =name=ether2
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !done
>>>

Okeh, sekali lagi, bagaimana kalau ingin menampilkan interface ether saja dan selain daripada ether1 dan ether2? coba ketik perintah ini :

/interface/print
?=type=ether
?#&
?=name=ether1
?#!
?=name=ether2
?#!

maka hasilnya akan seperti dibawah ini :

<<< /interface/print
<<< ?=type=ether
<<< ?#&
<<< ?=name=ether1
<<< ?#!
<<< ?=name=ether2
<<< ?#!
<<<  >>> !re
>>> =.id=*3
>>> =comment=
>>> =name=ether3
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*4
>>> =comment=
>>> =name=ether4
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !re
>>> =.id=*5
>>> =comment=
>>> =name=ether5
>>> =mtu=1500
>>> =type=ether
>>> =dynamic=false
>>> =running=true
>>>
>>> !done
>>>

Mengapa hasilnya bisa seperti itu ??? bagaimana rumusan nya??? Topik apa yang sedang kita bahas saat ini???
Okey, jadi yang sedang ane uji coba sekarang ini adalah tentang MikroTik API bagian Queries yang hanya disupport pada RouterOS versi 3.22 ke atas…
begini rumusan nya (walaupun sebenarnya ane masih belum terlalu faham betul, but ini asumsi ane okeh!!)

kalau berdasarkan situs http://wiki.mikrotik.com/wiki/Manual:API, berikut keterangan nya:
Okeh, jadi kalau di terjemahkan (pake google translate and di perbaiki) :

QUERIES
perintah cetak menerima kata-kata yang telah di kirimkan dan akan mengatur ulang satu set kalimat . Fitur ini tersedia sejak RouterOS 3.21.

Query dimulai dengan tanda ‘?’ (tanpa tanda petik)
Urutan kata – kata Query sifatnya signifikan. Query di evaluasi mulai dari kata pertama.
Query akan di evaluasi pertiap item yang berada dalam daftar, jika query berhasil, item akan diproses dan jika query gagal item akan diabaikan.
Query di evaluasi menggunakan tumpukan (stack) nilai boolean (true/false). Awalnya tumpukan (stack) berisi jumlah nilai ‘true’ tak terbatas. Pada akhir proses evaluasi, jika tumpukan (stack) berisi setidaknya satu nilai ‘false’ maka query menjadi gagal.
Pengoperasian kata – kata dalam query adalah berdasar pada aturan berikut ini :

Query Desciption
?name Stack akan mengirim ‘true’ jika item mempunyai value (nilai) dari property name, dan Stack akan mengirim ‘false’ jika hal sebaliknya terjadi.
?-name Stack akan mengirim ‘true’ jika item tidak memiliki value (nilai) dari property name, dan Stack akan mengirim ‘false’ jika hal sebaliknya terjadi.
?name=x
?=name=x
Stack akan mengirim ‘true’ jika property name memiliki value (nilai) sama dengan x, dan Stack akan mengirim ‘false’ jika hal sebaliknya terjadi.
?<name=x Stack akan mengirim ‘true’ jika property name memiliki nilai kurang dari x, dan Stack akan mengirim ‘false’ jika hal sebaliknya terjadi.
?>name=x Stack akan mengirim ‘true’ jika property name lebih besar dari x, dan Stack akan mengirim ‘false’ jika hal sebaliknya terjadi.
?#operations berikut ini aturan operasi yang berlaku dalam stack: string operasi di evaluasi dari kiri ke kanan.

urutan digit desimal di ikuti dengan sembarang karakter atau akhir kata ditafsirkan sebagai index stack dimana nilai index pada stack pertama adalah 0.

index  yang di ikuti oleh karakter akan mendorong salinan (copy) pada nilai tersebut. index yang di ikuti kata akhiran akan menggantikan semua nilai dengan nilai pada index tersebut.

‘!’ (not) karakter akan menggantikan nilai atas dengan nilai yang berlawanan dengan nya.

‘&’ (and) karakter akan membuang dua nilai (value) dan sebagai hasilnya karakter ini akan melakukan operasi logis ‘and’.

‘|’ (or) karakter akan membuang dua nilai (value) dan sebagai hasilnya karakter ini akan melakukan operasi logis ‘or’.

‘.’ (dot) karakter tidak akan menjadikan error

‘.’ (dot) karakter setelah karakter lain akan mendorong atau mengirim salinan pada nilai di bagian atas.

Audience : Wah masih bingung gan???
Penulis : Tenang ane juga bingung kok, abis bahasanya baku bangets… tapi mari kita bahas sama – sama siapa tau kita bisa mengerti…
jadi begini, misalnya ada sintaks seperti ini:

/interface/print
?=type=vlan
?=type=ether
?#|
?=name=ether1
?#!
?#&

kemudian misalnya, kita anggap masing – masing baris dengan kode seperti ini :
?=type=vlan adalah P1
?=type=ether adalah P2
?#| adalah L1
?=name=ether1 adalah P3
?#! adalah L2
?#& adalah L3

okey kalau kita susun dalam bentuk ke kanan jadinya seperti ini :
P1 P2 L1 P3 L2 L3

seperti yang telah dijelaskan dalam tabel diatas, setiap operasi yang ditandai dengan ?# maka dia memiliki rumusan sendiri. Dan setelah ane analisa maka bentuk tadi akan diubah menjadi seperti ini :
P1 L1 P2 L3 L2 P3

dan hasilnya akan menjadi seperti sintaks dibawah ini saat dibaca oleh MikroTik RouterOS :

?=type=vlan
?#|
?=type=ether
?#&
?#!
?=name=ether1

sehingga seolah – olah sintaks yang diterima oleh mikrotik menjadi seperti ini :

?=type=vlan ?#| ?=type=ether ?#& ?#! ?=name=ether1

masih belibet kan??? sama… tapi mari coba ubah bentuknya agar lebih mudah dimengerti menjadi seperti ini :

type=vlan or type=ether and name!=ether1

Pertanyaan nya adalah bagaimana bentuk seperti ini bisa di analogikan???
Hal ini karena mikrotik mengimplementasikan stack, yang mana setiap operasi logika and dan or akan membuang dua perintah dari stack dan akan mengubahnya menjadi bentuk operasi logis.
Nah itu asumsi ane… jadi benar atau salahnya masih belum bisa ane pertanggung jawabkan, untuk mendapat contoh – contoh yang lebih banyak silahkan buka link pada wiki mikrotik ini : http://wiki.mikrotik.com/wiki/API_command_notes

Okeh, semoga bermanfaat… sekian dan terima kasih…

Instalasi Graphical Network Simulator (GNS) sebagai Lab Virtual Cisco pada Ubuntu


Menurut situs GNS, Graphical Network Simulator (GNS) adalah sebuah simulator yang digunakan untuk membangun sebuah simulasi jaringan yang kompleks.  GNS berjalan dengan integrasi aplikasi-aplikasi lain untuk menyediakan simulasi yang akurat dan komperhensif. Aplikasi-aplikasi tersebut antara lain :

  • Dynamips, yang berfungsi untuk simulator Cisco IOS
  • Dynagen, interface berbasis text yang berfungsi mengontrol Dynamips
  • Qemu, emulator dan virtulisasi open source
  • VirtualBox, perangkat lunak virtualisasi yang powerfull

GNS adalah sebuah perangkat lunak pelengkap yang sangat baik untuk simulasi yang mendekati nyata (laboratorium nyata) bagi insinyur jaringan, administrator jaringan dan tentunya bagi mereka yang sedang dalam proses untuk mendapatkan sertifikasi seperti, Cisco CCNA, CCNP, dan CCIE dan juga untuk mereka yang ingin mengejar sertifikasi Juniper JNCIA, JNCIS, dan JNCIE.

Dukungan dan  integrasi VirtualBox (unofficial version) saat ini memungkinkan system engineer dan Administrator untuk membangun sebuah lab virtual  untuk RedHat (RHCE, RHCT), Microsoft (MSCE, MSCA), Novell(CLP) dan sertifikasi-sertifikasi lain. Selain itu, GNS bersifat open sources dan multiplatform, sehingga memungkinkan GNS bisa digunakan pada berbagai sistem operasi seperti Microsoft Windows, Linux, dan MacOS.

GNS juga menyediakan dukungan untuk integrasi dengan wireshark untuk melakukan analisa segment, packet, ataupun frame padal layer TCP/IP. Dukungan integrasi ini memungkinkan Anda bisa untuk mengetahui setiap layer TCP/IP yang bekerja pada Lab Virtual anda. Sifat GNS yang virtual memungkinkan rancangan jaringan virtual yang Anda bangun bisa diakses melalui komputer lain dengan port-port yang telah Anda ataupun GNS tentukan.

Secara sederhana saya dapat menilai GNS salah satu bentuk Lab Virtual yang sangat baik untuk pembelajaran terutama bagi mereka yang sedang mengejar sertifikasi dan network engineer. Menggunakan GNS sebagai Lab Virtual serasa memiliki perangkat asli tapi palsu(virtual ghitu loh). Bagi yang kurang uang saku di dompet untuk membeli perangkat asli dengan jumlah yang memadai untuk membangun sebuah uji coba maka GNS salah satu solusi terbaik yang anda punya saat ini.

Cisco sendiri memiliki perangkat lunak simulator untuk mempermudah proses belajar Anda seperti Packet Tracer, namun Packet Tracer bisa dikatakan Lab Virtual yang tertutup dan terbatas. Sementara GNS, batasan nya hanya resource komputer anda (RAM, CPU dan lain sebagainya), hal ini karena GNS menggunakan Cisco IOS langsung untuk bisa berjalan. Di setiap kelebihan selalu ada kekurangan, begitu pula dengan GNS. Kelebihan yang dimiliki GNS sebagai Lab Virtual di isi dengan kekurangan bahwa GNS tidak bisa berjalan kecuali Anda memilki Cisco IOS yang berasal dari perangkat Cisco Anda langsung, sehingga untuk bisa menggunakan GNS anda harus melakukan ekstrak Cisco IOS dari perangkat Cisco anda yang asli.

Okeh, cukup bicara teori nya….

Sekarang mari mencoba untuk menginstall GNS pada Ubuntu anda… tuliskan sintaks dibawah ini pada terminal linux ubuntu anda:

sudo apt-get install gns3 dynamips qemu wireshark

Okey setelah proses instalasi anda selesai, buka unity dan ketik gns kemudian klik icon GNS maka akan tampil antarmuka sebagai berikut :

GNS3_020

Pada bagian samping kiri pada antarmuka diatas Anda disediakan perangkat-perangkat Jaringan Cisco, Juniper, Swicth, ATM, IDS Qemu Host dan Cloud. Perangkat-perangkat virtual diatas bisa anda tambahkan pada jika anda memiliki Firmware atau IOS. Okey selanjutnya buka menu Edit->IOS image and hypervisor seperti pada gambar dibawah ini :

Menu_021

Setelah itu akan muncul antarmuka sebagai berikut :

Preferences_030

Pada tab IOS Image, anda disediakan sebuah fitur untuk menambah Image dari system operasi dari Cisco, Juniper maupun Qemu. Seperti yang Anda lihat pada gambar diatas pada label Settings, Anda bisa memilih OS Image dan mengatur platform serta model dari OS Image anda. Biasanya jika Anda memiliki Image Cisco IOS, Default RAM yang digunakan oleh Cisco sudah secara default ditentukan akan tetapi anda bisa menambah jumlah penggunaan RAM sesuai kebutuhan Anda. Jika Anda telah mengisi field-filed pada label Setting jangan lupa untuk mengklik tombol save untuk menyimpan OS Image yang telah Anda inputkan.

Untuk melakukan pengaturan terhadap Qemu Host (Virtual Machine) agar anda bisa membuat sebuah mesin virtual untuk menjalankan Sistem Operasi yang berbeda, buka menu Preference->Qemu seperti pada gambar dibawah in :
Menu_022

Preferences_030

 

Pada gambar diatas anda bisa memasukan OS Image untuk sistem operasi yang akan berjalan sebagai virtual machine. Field-field yang dibutuhkan antara lain :

  • Identifier name sebagai nama virtual machine
  • Binary Image sebagai path OS Image Sistem Operasi Anda
  • RAM yang akan digunakan untuk menjalankan virtual machine
  • Number of NICs untuk mengatur jumlah kartu jaringan Anda
  • NIC Model untuk menentukan Model kartu jaringan yang Anda inginkan
  • Qemu Option jika anda memerlukan opsional untuk pengaturan tambahan dalam menjalankan Qemu
  • Use KQemu untuk menjalankan Qemu dalam bentuk KDE
  • Use KVM (Linux Only) untuk mengatur kernell based virtual machine (tentunya ini khusus untuk sistem operasi linux)

Jika anda telah seleasi maka langkah selanjutnya mengklik tombol save untuk menyimpan inputan data Anda.

 

Okey, tutorial dengan kasus akan dibahas selanjtunya… to be continued….

Sumber Rujukan : http://www.gns3.net

Tutorial Cisco Static Routing


Okey kali ini ane akan membahas mengenai static routing pada cisco. Tools yang ane gunakan adalah Cisco Packet Tracer versi 5.3, soo untuk bisa mengikuti tutorial ini download terlebih dahulu cisco packet tracer versi 5.3. Okey begini topology nya…

Screen_Shot_2012-04-06_at_3.42_.12_AM_

berikut ini tabel nya :

No Nama Perangkat Interface IP Address Subnet Mask Gateway
1 R1 Fa0/0 172.30.0.2 255.255.255.252 N/A
R1 Fa0/1 172.30.2.1 255.255.255.0 N/A
2 R2 Fa0/0 172.30.0.1 255.255.255.252 N/A
R2 Fa0/1 172.30.1.1 255.255.255.0 N/A
3 PC A FastEthernet 172.30.2.2 255.255.255.0 172.30.2.1
4 PC B FastEthernet 172.30.1.2 255.255.255.0 172.30.1.1

Okey… ane akan berikan contoh melakukan konfigurasi berdasarkan tabel diatas. Langsung saja….

Konfigurasi R1

Klik pada R1 dan masukan sintaks berikut ini :

Router>enable
Router#conf t
Router(config)#hostname R1
R1(config)#int fa0/0
R1(config-if)#ip address 172.30.0.2 255.255.255.252
R1(config-if)#no shutdown
R1(config-if)#ip address 172.30.2.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#ip route 172.30.1.0 255.255.255.0 172.30.0.1
R1(config)#end
R1#copy run start

Konfigurasi R2
Klik R2 dan masukan sintaks berikut ini :

Router>enable
Router#conf t
Router(config)#hostname R2
R2(config)#int fa0/0
R2(config-if)#ip address 172.30.0.1 255.255.255.252
R2(config-if)#no shutdown
R2(config-if)#ip address 172.30.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#ip route 172.30.2.0 255.255.255.0 172.30.0.2
R2(config)#end
R2#copy run start

Okey selanjutnya lakukan konfigurasi pada PC A dan PC B berikut ini contoh gambarnya :
PC A

Screen_Shot_2012-04-06_at_3.45_.39_AM_

PC B

Screen_Shot_2012-04-06_at_3.46_.09_AM_

Silahkan di analisa apa yang sedang terjadi dengan perintah show ip route pada masing-masing router untuk bisa memahai apa yang sedang terjadi… dan satu lagi… teman terbaik anda adalah google… silahkan cari dengan kata kunci routing table cisco untuk bisa memahai lebih lanjut….
selamat mencoba….

Rumus Kalkulasi Wireless


bulan ramadhan iseng – iseng ney ngumpulin rumus – rumus wireless… cpa tau bermanfaat…
langsung aja gan…

Mengitung Panjang Gelombang

λ = c/f

keterangan :
λ = panjang gelombang (meter)
c = kecepatan cahaya (300.000 km/s atau 300.000.000 m/s)
f = frekuensi (Hz)

misalnya kita ingin mengetahui panjang gelombang sinyal wifi yang bekerja pada frekuensi 2,4 GHz maka :

λ = c/f
λ = 300.000.000 m/s / 2400.000.000 Hz
λ = 0,125 meter
λ = 12,5 cm

maka panjang gelombang dari sinyal wireless yang bekerja pada frekuensi 2,4 GHz adalah 12,5 cm artinya pada frekuensi ini panjang satu buah gelombang adalah 12,5 cm…

Menghitung dBm (dBmW)

X = 10 Log P

Keterangan  :
X = jumlah desibel yang di hasilkan (dBm)
P = daya dalam miliwatt (mW)

misalnya pada kasus ini Radio (Perangkt Wireless seperti access point atau wireless pada laptop) yang kita miliki mengeluarkan power sebesar 100 miliWatt maka :

X = 10 Log P
X = 10 Log (100)
X = 20 dBm

maka daya yang dikeluarkan oleh radio adalah sebesar 20 dBm….

Menghitung Freznel Zone

r = 0,6 * 17,31 * sqrt((d1*d2)/(f*d))

keterangan :
r  = area freznel zone
d = jarak antar kedua antenna yang saling terkoneksi (meter)
f  = frekuensi (MHz)
d1 = jarak antenna pertama dari penghalang (meter)
d2 = jarak antenna kedua dari penghalang (meter)

okeh kita bahas dikit kapan di pake rumus ney… permisalan kita masang antenna dari satu titik ke titik yang laen…. nah pas masang ada penghalang di tengah – tengah kayak gini ney misalnya …

misalnya jarak antar antenna (d) 4 kilometer trus jarak antenna pertama dari pohon 1,5 kilometer trus jarak antenna kedua dari penghalang 2,5 kilometer berapa area freznel zone nya…. berarti begini perhitungannya …

r =  17,31 * sqrt((d1*d2)/(f*d))
r =  17,31 * sqrt((1500/2500) / (2437*4000))
r =  17,31 *sqrt(3750000 / 9748000)
r = 10.736307495 meter

jika seandainya tinggi antenna pertama dan antenna kedua 15 meter maka freznel zone akan berada 15 meter – 10.736307495 meter =  4.26 meter diatas tanah… jika kita ingin hanya 60% area bebas hambatan maka kita perlu memodifikasi sedikit rumusnya gan… jadinya kayak gene….

r = 0,6 * 17,31 * sqrt((d1*d2)/(f*d))

Sooo ntar lok dapet hasilnya tinggal dikurangis sama ketinggian antenna… lok seandainya masih terhalang dengan ketinggian tade berarti antenna harus di tinggikan lage supaya area bebas hambatan tambah banyak… akhirnya sinyal kuat lah…. gila geto…..

Menghitung Link Budget

untuk menghitung link budget anda bisa mendownload kalkulator yang sudah buat di link ini :http://gen5x4.wordpress.com/2010/11/17/link-budget-calculator/ , tapi anda juga perlu tau cara menghitung dan rumus nya kalau kebetulan lagi di hutan trus listrik gak ada pake nyalain laptop, so ini rumusnya :

Pemancar —-> Total Gain = (TX1 + AG1  – CL1 ) + (AG2 – CL2)

keterangan :
TX1 = TX Power Radio 1 (dBm)
AG1 = Antenna Gain Radio 1 (dBi)
CL1 = Cable Loss Radio 1 (dB)
AG2 = Antenna Gain Radio 2 (dBi)
CL2 = Cable Loss Radio 2 (dB)

Penerima ——– > Total Gain = (TX2 + AG2  – CL2 ) + (AG1 – CL1)

keterangan :
TX2 = TX Power Radio 2 (dBm)
AG2 = Antenna Gain Radio 2 (dBi)
CL2 = Cable Loss Radio 2 (dB)
AG1 = Antenna Gain Radio 1 (dBi)
CL1 = Cable Loss Radio 1 (dB)

Dan Rumus ini juga

LFSL = 40 + 20 * Log r

keterangan
LFSL = Hambatan bebas udara atau Path Loss (dB)
r  = jarak antar kedua antenna (meter)

okeh misalnya kasus nya kayak gene gan :

Pada sebuah sambungan antar dua buah antenna wireless yang jarak antara keduanya adalah 5 km, radio di titik pertama memiliki daya sebesar 150 miliWatt dengan menggunakan antenna grid yang memiliki gain sebesar 24 dBi serta menggunakan kabel sepanjang 1 meter dimana 1 meter kabel akan mengurangi gain sebesar 1 dB. Sementara itu radio titik kedia memiliki daya sebesar 100 miliWatt dengan menggunakan antenna wajan bolic yang memiliki gain sebesar 20 dBi serta menggunakan kabel sepanjang 2 meter  dimana 1 meter kabel akan mengurangi sinyal sebesar  1 dB. Sensivitas Penerima pada Radio di titik pertama adalah -90 dB dan Sensivitas Penerima pada Radio di titik kedua adalah -95 dB.

Hitung
a. Kekuatan Sinyal yang didapatkan oleh Radio di titik pertama.
b. Kekuatan Sinyak yang didapatkan oleh Radio di titik kedua.

okeh ane jawab ney…

jawaban yang (a)
X = 10 Log P
X = 10 Log 150
X = 21.76 dBm
X = 22 dBm

berarti

Total Gain = (22 dBm + 24 dBi – 1 dB) + (20 dBi – 2 dB)
Total Gain = 63 dB

nah sekarang tinggal hitung Path Loss :

LFSL = 40 + 20 * log r
LSFL = 40 + 20 * log (5000)
LSFL = 113,97 dB
LSFL = 114 dB

setelah kita mendapatkan redaman ruang bebas (Path Loss) tinggal dikurangi aja sama Total Gain

Kekuatan Sinyal = 63 dB – 114 dB = -51 dB

Jika sensitivitas penerima pada radio kedua (di sisi client) adalah -95 dB maka kita tinggal mengurangi dengan kekuatan sinyal dari radio pertama…

95 dB –  51 dB = 44 dB

dari hasil perhitungan diatas ntu berarti sinyal bisa diterima cukup baik gan…. pokoknya yang normal ntu 15 dB dah… supaya lok antenna di goyang sinyal masih stabil… nah sekarang coba kita liat apa sinyal dari radio di titik kedua (client) bisa ngirim balik nggak ke pemancar… (radio di titik pertama)…

jawaban yang (b)

X = 10 log P
X = 10 log 100
X = 20 dBm

Total Gain  = (TX2 + AG2 – CL2) + (AG1 – CL1)
Total Gain  = (20 dBm + 20 dBi -2 dB) + (24 dB – 1 dB)
Total Gain = 61 dB

Kekuatan Sinyal = 64 dB – 114 dB = -53 dB

Jika Sensitivitas Radio Penerima pada titik pertama (pemancar) sebesar -90 dB tinggal kurangi aja gan….

90 dB – 53 dB = 37 dB

seep koneksi sejauh 5 kilometer lancar – lancar aja gan…

sepertinya ney aja dulu coz udah deket sahur ney… ntar keburu sahur….
masih cupu seperti dulu gan… lok tau ya berbagi lok gak tau ya apa yang mau di bagi….

ambil dari sini :

http://wndw.net

http://www.wlanmall.com/media/article/fresnelzone.jpg