Rabu, 19 Juni 2013

Modul 5 Jaringan Komputer (Tutorial Iptables)

Topologi dan subnet sama dengan modul sebelumnya.

Soal Shift


  1. Semua subnet tidak dapat mengakses TCP port 21, 443, 66 pada DMZ kecuali KEBUN_BIBIT sedangkan port TCP yang diizinkan untuk mengakses DMZ adalah port 80, 8080, 22.
  2. Mengijinkan semua akses UDP ke DMZ.
  3. Subnet DMZ tidak dapat di PING dari luar selain subnet AJK dan jaringan internal.
  4. Koneksi kepada DMZ melalui ssh dibatasi sebanyak 5 koneksi.
  5. Buatlah sebuah perintah iptables untuk mengatasi synflood
  6. Buatlah sebuah perintah iptables untuk mengatasi force ssh attack.
  7. Buatlah perintah iptables untuk memblok paket scanning. Contoh: xmas, file scan.
  8. Subnet taman_bungkul hanya bisa diakses oleh subnet kebun_bibit, subnet plasa_surabaya hanya bisa diakses ketika jam kerja (08.00 – 16.00), subnet sutos tidak bisa melakukan koneksi ke YM dan Facebook serta tidak bisa melakukan streaming video pada hari dan jam kerja (senin-jumat 07.00-17.00).
  9. Selain DMZ gunakan NAT untuk mengakses jaringan luar (tidak boleh menggunakan masquerade).
  10. Catat semua log yang di-drop oleh firewall.


Jawab

1.
Di Ampel
iptables -A INPUT -s 172.16.1.0/27 -i eth0 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
iptables -A INPUT -s 172.16.1.0/27 -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j DROP
iptables -A INPUT -s 172.16.1.0/27 -i eth0 -p tcp --dport 66 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 66 -j DROP

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

2.
Di Ampel
iptables -A INPUT -i eth0 -p udp -s 0/0 --dport 53 -j ACCEPT

3.
Di Ampel
iptables -A FORWARD -p icmp -d 10.151.71.112/29 -s 10.151.36.0/24--icmp-type echo-request -j ACCEPT 
iptables -A FORWARD -p icmp -d 10.151.71.112/29 -s 172.16.0.0/18 --icmp-type echo-request -j ACCEPT 
iptables -A FORWARD -p icmp -d 10.151.71.112/29 --icmp-type echo-request -j REJECT

4.
Di Ampel
iptables -I INPUT -p icmp --icmp-type echo-request -m recent --set
iptables -I INPUT -p icmp --icmp-type echo-request -m recent --update --hitcount 5 -j DROP

5.
Di TP dan GM
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 10/second --limit-burst 50 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
iptables -A syn-flood -j DROP

6.
Di TP dan GM
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent  --update --seconds 60 --hitcount 4 -j DROP

Di Siola
iptables -A FORWARD -p tcp –d 172.16.2.0/26 -m time --timestart 08:00 --timestop 16:00 -j ACCEPT
iptables -A FORWARD -p tcp –d 172.16.2.0/26 -j REJECT

7.
Di TP dan GM(scan xmas)
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

8.
Di stasiun_gubeng
iptables -A INPUT -s 172.16.1.0/27 -i eth0 -j ACCEPT
iptables -A INPUT -i eth0 -j DROP

Di Siola
iptables -A FORWARD -p tcp –d 172.16.2.0/26 -m time --timestart 08:00 --timestop 16:00 -j ACCEPT
iptables -A FORWARD -p tcp –d 172.16.2.0/26 -j REJECT

Di balai_kota
iptables -A FORWARD -p tcp -d 172.16.0.0/24 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT 
iptables -A FORWARD -p tcp -d www.facebook.com –s 172.16.0.0/24 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT
iptables -A FORWARD -p tcp -d www.messenger.yahoo.com –s 172.16.0.0/24 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT
iptables -A FORWARD -p tcp -d www.youtube.com –s 172.16.0.0/24 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT

9.
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT \ --to $PPPIP

10.
lihat di /var/log/firewall, warn, messgaes -clutter

Semua ditaruh di etc/rc.local masing-masing router atau DMZ sesuai kebutuhan lalu dilakukan service network restart serta reboot.

Jumat, 07 Juni 2013

Konfigurasi IP dan Tabel Routing serta Implementasi pada UML Menggunakan Algoritma CIDR

Berikut topologi yang diberikan:
Topologi Default
Pertama yang harus dilakukan adalah membagi topologi yang ada agar memiliki beberapa subnet kecil. Syarat pembagian subnet ini adalah dalam satu subnet kecil tidak boleh terdapat router. Sehingga antara ethernet router satu dengan ethernet router yang lainnya dihubungkan oleh sebuah subnet. Subnet-subnet kecil akan ditunjukkan dengan daerah-daerah yang dibatasi dengan garis berwarna hijau di bawah ini.
Topologi Default (1)
Pembagian berdasarkan abjad:
Topologi Default(5)
Untuk melakukan subnetting, kita harus tahu berapa kebutuhan alamat IP tiap-tiap subnet. Misalnya sutos memiliki 150 host, maka dia otomatis butuh 150 alamat IP untuk masing-masing host, 2 alamat IP untuk network ID dan broadcast ID, serta 1 alamat IP untuk kaki router balai_kota yang masuk subnet A. Dengan demikian subnet A butuh 153 alamat IP. Seharusnya kita bisa mengalokasikan hanya 153 alamat IP untuk subnet A, namun agar memudahkan penghitungan alamat IP maka kita alokasikan jumlah IP sebanyak 2^x untuk masing-masing subnet. Syarat berikutnya adalah 2^x harus lebih dari/sama dengan jumlah alamat IP yang dibutuhkan. Dengan demikian kita perlu mengalokasikan 256 atau 2^8 alamat IP untuk subnet A. Karena normalnya /0 adalah 2^32 alamat IP, maka kita cukup menuliskan /(32-8) atau /24 untuk subnet A.

Pembagian subnet berdasarkan alokasi jumlah alamat IP:

  • A: Butuh 153 alamat IP, sehingga perlu dialokasikan 256 alamat IP(/24)
  • B: Butuh 25 alamat IP, sehingga perlu dialokasikan 32 alamat IP(/27)
  • C: Butuh 63 alamat IP, sehingga perlu dialokasikan 64 alamat IP(/26)
  • D: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • E: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • F: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • G: Butuh 28 alamat IP, sehingga perlu dialokasikan 32 alamat IP(/27)
  • H: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • I: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • J: Butuh 4 alamat IP, sehingga perlu dialokasikan 4 alamat IP(/30)
  • AB: Gabungan antara /24 dengan /27, sehingga /(24-1) = /23
  • ABC: Gabungan antara /23 dengan /26, sehingga /(23-1) = /22
  • ABCD: Gabungan antara /22 dengan /30, sehingga /(22-1) = /21
  • ABCDE: Gabungan antara /21 dengan /30, sehingga /(21-1) = /20
  • FG: Gabungan antara /30 dengan /27, sehingga /(27-1) = /26
  • HI: Gabungan antara /30 dengan /30, sehingga /(30-1) = /29 (DMZ)
  • HIJ: Tidak perlu digabung karena H dan I memiliki alokasi IP DMZ sendiri sebagai IP Public agar dapat diakses dari luar.
  • ABCDEFG: Gabungan antara /20 dengan /26, sehingga /(20-1) = /19
  • ABCDEFGHIJ: Gabungan antara /19 dengan /30, sehingga /(19-1) = /18

Pembagian IP(CIDR) adalah sebagai berikut:

  • ABCDEFGJ(/18): x.y.0.0 - x.y.63.255
  • ABCDEFG(/19): x.y.0.0 - x.y.31.255
  • ABCDE(/20): x.y.0.0 - x.y.15.255
  • ABCD(/21): x.y.0.0 - x.y.7.255
  • ABC(/22): x.y.0.0 - x.y.3.255
  • AB(/23): x.y.0.0 - x.y.1.255
  • J(/30): x.y.32.0 - x.y.32.3
  • FG(/26): x.y.16.0 - x.y.16.63
  • E(/30): x.y.8.0 - x.y.8.3
  • G(/27): x.y.16.0 - x.y.16.31
  • F(/30): x.y.16.32 - x.y.16.35
  • D(/30): x.y.4.0 - x.y.4.3
  • C(/26): x.y.2.0 - x.y.2.63
  • B(/27): x.y.1.0 - x.y.1.31
  • A(/24): x.y.0.0 - x.y.0.255

Pembagian IP di Host dan Router:

  • sutos: 172.16.0.1 (150 host diwakili 1 host)
  • balai_kota:
    • eth0: 172.16.1.30
    • eth1: 172.16.0.254
  • kebun_bibit: 172.16.1.1 (20 host diwakili 1 host)
  • siola:
    • eth0: 172.16.4.1
    • eth1: 172.16.2.62
    • eth2: 172.16.1.29
  • plaza_surabaya: 172.16.2.1 (60 host diwakili 1 host)
  • monkasel:
    • eth0: 172.16.8.1
    • eth1: 172.16.4.2
  • taman_bungkul: 172.16.16.1 (25 host diwakili 1 host)
  • stasiun_gubeng:
    • eth0: 172.16.16.33
    • eth1: 172.16.16.30
  • tp(DMZ): 10.151.71.113/30
  • gm(DMZ): 10.151.71.115/30
  • ampel:
    • eth0: 172.16.32.1
    • eth1: 10.151.71.114/30
    • eth2: 10.151.71.116/30
  • tugu_pahlawan:
    • eth0: 10.151.70.58 (satu subnet dengan IP tuntap)
    • eth1: 172.16.32.2
    • eth2: 172.16.8.2
    • eth3: 172.16.16.34

Cara mengatur routing table pada masing-masing router di UML adalah dengan memasukkan network ID subnet-subnet yang ada di bawah router tersebut dan menuliskan alamat IP next hop yang harus dilalui untuk menuju subnet yang diinginkan. Syntaxnya adalah "up ip route add <network ID/subnet> via <next hop>" dan dituliskan di "etc/network/interface" pada bagian ethernet yang dilalui sebagai jalan keluar dari router tersebut. Tambahkan semua subnet di bawah router yang akan diatur tabel routing-nya kecuali yang bersebelahan/menempel dengan router tersebut. Dengan cara ini maka tiap router akan mengenali semua network ID dari subnet-subnet yang ada di bawahnya. Jangan lupa juga menuliskan alamat IP yang dijadikan sebagai gateway router itu agar dia mengirimkan paket ke alamat gateway ketika dia tidak menemukan alamat IP yang dituju.
Berikut ini kutipan gambar hasil pengaturan alamat IP beserta tabel routing pada UML(router dan host).
tugu_pahlawan

ampel

tp

gm

stasiun_gubeng

taman_bungkul

monkasel

siola

plaza_surabaya

kebun_bibit

balai_kota

sutos

Kemudian pada masing-masing router, jalankan perintah "nano /etc/sysctl.conf". Cari baris yang sesuai kutipan gambar berikut ini.
sysctl.conf(1)
Lalu uncomment baris tersebut agar router dapat meneruskan paket.
sysctl.conf(2)
Lakukan perintah ip forwarding di atas pada setiap router yang ada.
Untuk memeriksa apakah router sudah dapat meneruskan paket, lakukan perintah seperti kutipan gambar berikut.
sysctl -p
Jika UML menampilkan report seperti di atas, maka seharusnya router tersebut sudah dapat meneruskan paket.

Setelah semua konfigurasi di atas kita lakukan, jalankan perintah "service network restart" pada seluruh router dan host. Dengan ini, masing-masing host dan router sudah bisa mengirim dan menerima paket satu sama lain. Untuk mengetes, lakukan perintah "ping <alamat IP yang dituju>".

Agar host pada topologi ini dapat mengirim paket ke server lokal lain, kita perlu melakukan konfigurasi tambahan pada router yang terhubung dengan tuntap, yaitu tugu_pahlawan. Lakukan perintah "nano /etc/rc.local" pada jendela tugu_pahlawan. Tambahkan konfigurasi seperti berikut ini.
rc.local
Konfigurasi ini akan membuat router tugu_pahlawan dapat melakukan request ke gateway supaya terkoneksi dengan internet luar. Untuk lebih jelasnya lagi silakan cari referensi tentang fungsi-fungsi iptables di internet.
Setelah melakukan konfigurasi di atas, jalankan perintah "reboot" di tugu_pahlawan maka seluruh host yang ada di topologi ini sudah dapat melakukan ping ke alamat IP luar atau server lokal lain di luar topologi ini.

Minggu, 12 Mei 2013

Instalasi dan Pengaturan DNS Server di Sistem Operasi Linux (Menggunakan Aplikasi bind9)


  • Untuk membuat dns server, kita perlu menginstall bind9 pada komputer yang ingin kita jadikan sebagai server dengan cara ketik "apt-get install bind9" atau "apt-get install bind9 dnsutils" pada terminal terlebih dahulu.
  • Langkah berikutnya adalah tambahkan nama domain yang ditangani oleh dns server melalui file "/etc/bind/name.conf.local" dengan script sebagai berikut:

  • zone "klpe14.jarkom.com" IN
    {
    type master;
    file "/etc/bind/db.klpe14.jarkom.com";
    };

    nb: contoh nama domain adalah "klpe14.jarkom.com"
  • Simpan file tersebut kemudian kita lakukan konfigurasi domain yang kita buat dengan membuka file "/etc/bind/db.klpe14.jarkom.com", perhatikan konfigurasinya sebagai berikut:

  • $TTL 86400
    @ IN SOA klpe14.jarkom.com. root.klpe14.jarkom.com. (
    1 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    86400 ) ; Negative Cache TTL
    ;
    @ IN NS klpe14.jarkom.com.
    @ IN A 172.16.0.2
    jerry IN A 172.16.0.10

    Baris berisi "@ IN A 172.16.0.2" maksudnya menunjukkan alamat IP dns server. Sementara baris "jerry IN A 172.16.0.10" bertujuan agar ketika kita mengunjungi alamat "jerry.klpe14.jarkom.com" maka akan diarahkan ke alamat "172.16.0.10". Kemudian simpan file di atas.
  • Ganti konfigurasi nameserver komputer yang akan mengakses agar mengarah ke dns server dengan mengubah konfigurasi di file "/etc/resolv.conf". Tambahkan perintah "nameserver [alamat IP dns server]" di baris teratas pada file tersebut, lalu simpan.
    Contoh: nameserver 172.16.0.2
  • Restart bind9 dengan cara "service bind9 restart" dan konfigurasi selesai.
Berikutnya adalah tutorial membuat back-up dns server (slave).
  • Install bind9 pada komputer yang digunakan untuk melakukan back-up dns server, buka file "/etc/bind/name.comf.local" lalu lakukan konfigurasi seperti di bawah ini:
  • zone "klpe14.jakrom.com" IN
    {
    type slave;
    file "/var/cache/bind/db.klpe14.jarkom.com";
    masters {172.16.0.2;};
    };

    Konfigurasi seperti di atas akan membuat komputer yang dipakai menjadi dns slave dari domain "klpe14.jarkom.com" pada ip 172.16.0.2 yang sudah dibuat di atas.
  • Kemudian tambahkan juga ip dns master sebagai nameserver di "/etc/resolv.conf" dengan cara seperti langkah sebelumnya lalu restart servis bind9 dan konfigurasi selesai.

Rabu, 10 April 2013

Web Server, Proxy Server, dan Contoh Program Web Server Menggunakan Bahasa Pemrograman Java

Web server merupakan software yang memberikan layanan data yang berfungsi menerima permintaan HTTP atau HTTPS dari klien yang dikenal dengan browser web dan mengirimkan kembali (response) hasilnya dalam bentuk halaman - halaman web yang umumnya berbentuk dokumen HTML. 
Fitur-fitur dasar Web Server:

  1. HTTP: Setiap program web server bekerja dengan cara menerima request HTTP dari client dan merespon HTTP ke client tersebut sesuai permintaan(bisa berupa dokumen HTML, gambar, atau dokumen lain). Web server juga bisa mengirim respon kesalahan ketika terjadi kesalahan permintaan dari client berupa dokumen HTML atau teks yang menjelaskan penyebab terjadinya kesalahan.
  2. Logging: Setiap web server mampu mencatat informasi detil permintaan client dan responnya berupa log.
  3. Autentifikasi: Fitur untuk otorisasi permintaan dari client sebelum menggunakan resource dari web server, biasanya berupa username dan password.
  4. Penanganan konten statis
  5. Dukungan HTTPS: Dengan HTTPS memungkinkan koneksi aman dengan enkripsi ke server pada port 433 menggunakan SSL atau TSL.
  6. Kompresi konten: Hal ini digunakan untuk mengurangi waktu respon server (misal: menggunakan encoding gzip) sehingga hemat bandwidth.
  7. Virtual hosting: Berguna untuk melayani banyak website dengan satu IP address.
  8. Dukungan berkas berukuran besar
  9. Pengatur bandwidth: Berfungsi untuk membatasi kecepatan respon agar menghemat bandwidth dengan membatasu kecepatan respon supaya dapat melayani client lebih banyak.

Contoh Web Server:
Apache Tomcat, Microsoft Windows Server 2003 Internet Information Services, Lighttpd, Sun Java System, Xitami, Nginx, dan Zeus.

Proxy server adalah sebuah perangkat yang menjembatani komputer baik komputer client maupun komputer server dimana fungsi dasarnya yaitu connection sharing, filtering, dan chacing. Untuk connection sharing, Proxy server dapat bertindak sebagai gateway untuk jaringan lokal terhadap jaringan luar atau internet, karena paket data yang dikirimkan dari jaringan lokal ke jaringan luar harus melewati proxy server. Proxy sever sebagai connection sharing ini dapat bekerja pada layer Data-Link, layer Network dan Transport, maupun layer Aplikasi dalam hirarki layer komunikasi jaringan menurut OSI, namun sebagian besar pengertian, proxy server bekerja pada layer aplikasi.

Gambaran jelas yang membedakan web server dan proxy server adalah sebagai berikut:
Diagram Kerja Web Server

Simulasi Kerja Proxy Server
Contoh source code program web server yang menggunakan bahasa pemrograman Java:



import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class WebServer {
    public static void main(String[] args) {
        try {
            Socket s = null;//langkah 1
            ServerSocket ss;
            ss = new ServerSocket(1234);
            s = ss.accept();
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            int dummy;
            char prev;
            prev = 0;
            String line;
            
            while(true)//langkah 2
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy=='\r'&&prev=='\n')
                {
                    break;
                }
                prev=(char)dummy;
            }
            
            FileInputStream fstream = new FileInputStream("lokasiteks.txt");//langkah 3
            
            DataInputStream dis = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader (dis));//langkah 4
            String txt = "\n";
            
            while((line = br.readLine())!= null)//langkah 5
            {
                txt+= line;
            }
            
            out.write(txt.getBytes());//langkah 6
            
            out.flush();
            s.close();
        } catch (IOException ex) {
            Logger.getLogger(WebServer.class.getName()).log(Level.SEVERE, null, ex);
        }
}
}


Penjelasan cara kerja:
  • Buat socket dan server socket lalu deklarasikan variabelnya. (Langkah 1)
  • Baca request dari client. (Langkah 2)
  • Buka file, lalu simpan dalam sebuah data stream. (Langkah 3)
  • Baca data stream tadi secara byte per byte. (Langkah 4)
  • Simpan karakter dalam string baru. (Langkah 5)
  • Tulis dalam output stream string yang isinya tulisan file yang dibuka, lalu flush dan tutup koneksi. (Langkah 6)

Senin, 11 Maret 2013

Mekanisme Data Melalui OSI Layer



  1. Awalnya data dibuat, ketika memulai proses pengiriman, data turun melalui Application layer (layer 7) layer ini merupakan interface antara jaringan dengan aplikasi yang digunakan user , layer ini bertanggung jawab dalam pertukaran informasi dari komputer ke jaringan, pada dasarnya. Dapat juga disebut bahwa layer ini berfungsi untuk mendefinisikan request dari user. Kemudian data diteruskan ke layer Presentation (layer 6), yang mana layer ini bertanggung jawab dalam menentukan apakah ia perlu untuk melakukan enkripsi terhadap request ini ataupun ke bentuk lain dari translasi data. Jika proses sudah lengkap, selanjutnya ditambahakan informasi yang diperlukan. Lalu di forward ke Session layer (layer 5) yang mana layer ini akan memeriksa apakah aplikasi merequest suatu informasi dan memverifikasi layanan yang direquest itu pada server.
  2. Sampailah data di Transport layer (layer 4), memastikan bahwa ia mempunya suatu koneksi yang sudah tepat dengan server dan memulai proses dengan mengubah informasi itu ke bentuk segment. Pengecekan error dan penggabungan data yang berasal dari aplikasi yang sama dilakukan di layer transport ini serta keutuhan data di jamin pula di sini. Terbentuk L4PDU dari proses ini.
  3. Selanjutnya segment tersebut diteruskan ke Network layer (layer 3), disini diterima segment-segment tadi dan ditambahkan alamat network untuk station yang me-request dan alamat network untuk server yang direquest. Segment-segment tersebut akan diubah menjadi packet-packet, Kemudian layer Network membuat header Network, dimana didalamnya terdapat juga alamat layer Network, dan ditempatkan L4PDU dibaliknya, dan terbentuklah L3PDU.
  4. Kemudian packet-packet tadi dilewatkan ke layer Data Link (layer 2) dan paket-paket tadi diatur dan kemudian akan dibungkus lagi ke dalam individual frame, salah satu contoh dalam proses ini adalah memberikan alamat MAC tujuan dan MAC address sumber yang kemudian informasi tersebut digunakan untuk membuat trailer. Dikarenakan suatu paket dapat dikirimkan melalui banyak sekali perangkat dan router, disinilah peran MAC Address dalam mengirimkan paket antara satu router dan router lainnya. Kemudian akan ditransmisikan ke media. Seluruh informasi yanng ditambahkan oleh tiap layer sebelumnya (sebagai suatu actual file request) harus cocok ke dalam ukuran 46-1500 byte data field pada frame ethernet. Data link layer bertanggung jawab untuk mengirimkan frame menurut topologi yang digunakan. Terbentuklah L2PDU pada proses ini.
  5. Terakhir, sampailah data di layer Physical (layer 1), informasi akan dibawa dari source menuju destination. Karena Physical layer tidak mengenal frame, ia akan melewatkan informasi itu ke bentuk bits. Tidak terjadi penambahan header pada layer ini. 1Layer Physical ini berhubungan dengan perangkat keras. Akhirnya bit-bit tersebut nantinya akan disinkronisasi dan kemudian diubah menjadi sinyal listrik yang berupa tinggi rendahnya tegangan dan selanjutnya ditransmisikan melalui media. Misalnya dari kabel ke tujuan, hal ini sesuai dengan karakteristik lapisan Physical layer yang menentukan rangkaian kejadian dimana arus bit berpindah melalui medium fisik.

Sekilas Tentang Crimping

Crimping adalah proses pembuatan kabel  jaringan. Tipe kabel straight digunakan saat menghubungkan dari PC ke Switch, Router ke Switch, Router ke HUB dan PC ke HUB. Sedangkan tipe kabel cross digunakan saat menghubungkan PC ke PC, Switch ke Switch, HUB ke HUB dan PC ke Router.

Susunan straight:


Susunan warna kabel straight

Susunan cross:


Susunan warna kabel cross

Sekilas Tentang Wireshark


Wireshark merukan salah satu dari software monitoring jaringan yang biasanya banyak digunakan oleh para administrator jaringan untuk mengcapture dan menganalisa kinerja jaringan.
Wireshark merupakan salah satu dari sekian banyak tool Network Analyzer yang banyak digunakan oleh Network administrator untuk menganalisa kinerja jaringannya terrmasuk protokol didalamnya.
Kegunaannya:
- Wireshark mampu menangkap paket-paket data atau informasi yang berseliweran dalam jaringan.
- Sniffing
- Wireshark dapat membaca data secara langsung dari Ethernet, Token-Ring, FDDI, serial (PPP dan SLIP), 802.11 wireless LAN, dan koneksi ATM.
- Program ini juga sering digunakan oleh chatters untuk mengetahui ip korban maupun para chatter lainnya lewat typingan room.
- Tool wireshark dapat menganalisa transmisi paket data dalam jaringan, proses koneksi dan transmisi data antar komputer.
- Selama kita bisa mendapatkan paket langsung dari jaringan, dengan tools seperti wireshark, maka kita juga bisa memanfaatkan wireshark untuk ‘menyadap’ pembicaraan Voice over IP.

Bagian-bagian Wireshark:
a. Comand Menu
b. Display Filter : Bagian untuk membatasi paket data yang ditampilkan..
c. Daftar Paket  : Tempat dimunculkan paket data yang ditangkap wireshark.
d. Detail Paket   : Data lengkap tentang sebuah paket.
e. Detail Heksa  : Detail data yang ditampilkan dalam bentuk heksadecimal.

Cara membaca tampilan dari Wireshark


Minggu, 10 Maret 2013

Contoh Sederhana Program Socket Client-Server

Dalam pemrograman jaringan sebenarnya dasarnya sangat sederhana. Pertama kita harus membuat method(disertai namanya) berupa socket dan server socket sebagai pintu masuk dan keluar programnya. Jadi ketika kita butuh mengirim data (misal: dari server ke client) maka kita buka dulu pintu di server lalu dikirim melalui pintu/socket tersebut ke socket client yang sudah terbuka. Setelah menggunakannya juga socket tersebut perlu ditutup agar program berjalan normal.
Ilustrasi
Apa itu socket?

Socket adalah suatu abtraksi yang mana aplikasi dapat mengirim dan menerima data seperti sama halnya dengan membuka suatu file untuk dibaca dan ditulis pada tempat penyimpanan file. Socket memungkinkan untuk masuk kedalam jaringan dan berkomunikasi dengan aplikasi lain yang juga masuk kedalam jaringan yang sama. Informasi yang ditulis kedalam socket pada suatu aplikasi pada suatu mesin dapat dibaca oleh aplikasi lain pada mesin yang berbeda dan sebaliknya.

Apa fungsi dari socket?

Fungsi utama dari socket yaitu mengatur pengiriman data pada jaringan komputer. Maksudnya yaitu memberitahukan apakah dia client atau serve,memberikan informasi data yang dikirim, memberikan informasi dimana data yang disimpan, memberikan informasi kemana data aka dikirimkan, dan lainnya.

Source Code Server #1:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author BASKARA */public class Server {    public static void main(String[] args) {    Socket s = null;    ServerSocket ss;        try {            ss = new ServerSocket(1234);            s = ss.accept(); //waiting connection                        InputStream in = s.getInputStream();            OutputStream out = s.getOutputStream();                        int dummy = 0;                        while(true)            {                dummy = in.read();                System.out.print((char)dummy);                if((char)dummy=='\n')                    break;            }                        dummy = 0;            String pesan = "Anda siapa?(1. Admin 2. User)";            String pesan1 = "Selamat datang admin!\n";            String pesan2 = "Selamat datang user!\n";            //String pesan3 = "!";                        out.write(pesan.getBytes());            out.flush();                        while(true)            {                dummy = in.read();                                if(dummy=='1')                {                    System.out.print("masuk\n");                    out.write(pesan1.getBytes());                    out.flush();                    break;                    /*dummy = (dummy - 48) + (dummy - 48);                    out.write((int)dummy);                    out.flush();*/                    //out.write(pesan3.getBytes());                    //out.write(new Integer(123).toString());                    //out.flush();                    //break;                }                else                {                    System.out.print("masuk\n");                    out.write(pesan2.getBytes());                    out.flush();                    break;                    /*dummy = (dummy - 48) + (dummy - 48);                    out.write((int)dummy);                    out.flush();*/                    //out.write(pesan3.getBytes());                    //out.write(new Integer(123).toString());                    //out.flush();                    //break;                }            }                        in.close();            out.close();            s.close();            ss.close();        } catch (IOException ex) {            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);        }}}

Source Code Client #1:



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            String tes = "Tes koneksi\n";
            
            out.write(tes.getBytes());
            out.flush();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy==')')
                    break;
            }
            //System.out.print('\n');
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
            tes = br.readLine();
            //System.out.print(tes.toString());
            out.write(tes.getBytes());
            out.flush();
            
            dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                //System.out.print(dummy);
                System.out.print((char)dummy);
                if((char)dummy=='!')
                    break;
            }
            
            in.close();
            out.close();
            s.close();
            
        } catch (UnknownHostException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
        
}
}


Alur program pertama di atas setelah terhubung adalah sebagai berikut:
1. Client mengirim pesan tes koneksi ke server.
2. Setelah dibaca oleh server, server akan mengirim pertanyaan apakah client merupakan admin atau user.
3. Client mengirimkan balasan ke server, jika balasan berupa "1" maka dia adalah admin, jika "2" atau selain itu maka dia adalah user.

Source Code Server#2:


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Server {
    public static void main(String[] args) {
    Socket s = null;
    ServerSocket ss;
        try {
            ss = new ServerSocket(1234);
            s = ss.accept(); //waiting connection
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy=='\n')
                    break;
            }
            
            dummy = 0;
            String pesan = "Masukkan angka yang ingin dikalikan 2: ";
            //String pesan1 = "Selamat datang admin!\n";
            //String pesan2 = "Selamat datang user!\n";
            String pesan3 = "!";
            
            out.write(pesan.getBytes());
            out.flush();
            
            while(true)
            {
                dummy = in.read();
                
                if(dummy=='1')
                {
                    /*System.out.print("masuk\n");
                    out.write(pesan1.getBytes());
                    out.flush();
                    break;*/
                    dummy = (dummy - 48) + (dummy - 48); //kode ASCII jadi harus dikurangi 48 dahulu
                    out.write((int)dummy);
                    out.flush();
                    //out.write(pesan3.getBytes());
                    //out.write(new Integer(123).toString());
                    //out.flush();
                    break;
                }
                else
                {
                    /*System.out.print("masuk\n");
                    out.write(pesan2.getBytes());
                    out.flush();
                    break;*/
                    dummy = (dummy - 48) + (dummy - 48);
                    out.write((int)dummy);
                    out.flush();
                    //out.write(pesan3.getBytes());
                    //out.write(new Integer(123).toString());
                    //out.flush();
                    break;
                }
            }
            
            in.close();
            out.close();
            s.close();
            ss.close();
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
}
}

Source Code Client#2:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            String tes = "Tes koneksi\n";
            
            out.write(tes.getBytes());
            out.flush();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy==')')
                    break;
            }
            //System.out.print('\n');
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
            tes = br.readLine();
            //System.out.print(tes.toString());
            out.write(tes.getBytes());
            out.flush();
            
            dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print(dummy);
                //System.out.print((char)dummy);
                //if((char)dummy=='!')
                    break;
            }
            
            in.close();
            out.close();
            s.close();
            
        } catch (UnknownHostException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
        
}
}

Alur program kedua di atas setelah dijalankan adalah sebagai berikut:
1. Client melakukan tes koneksi ke server.
2. Server membalas, meminta input angka yang akan dilipatgandakan.
3. Client mengirim angka ke server.
4. Angka berupa ASCII dikurangi 48 supaya ketahuan angka sesungguhnya, kemudian dilipatgandakan dan dikirim kembali ke Client.