MEMBUAT PROGRAM PEMANTAU JARINGAN (SNIFFER)

MEMBUAT PROGRAM PEMANTAU JARINGAN (SNIFFER)

  9 Volume 2 No. 1, Maret 2015

  Oleh :

  

Dadang Pandhu Dewantoro

Universitas MH Thamrin Jakarta

Dadang.pandudewantoro@umht.ac.id

Ringkasan Sniffer adalah program dan/atau peralatan yang memonitor data yang berada di jaringan.

  Sniffer dapat digunakan baik untuk manajemen jaringan maupun untuk mencuri informarsi dari jaringan.Untuk menulis program sniffer mengguanakan bahasa pemrograman Java, diperlukan Jpcap dan bila menggunakan bahasa C atau C++, diperlukan pcap. Bila penulisan dilakukan di lingkungan Windows, dibutuhkan library bernama WinPcap atau kalau menggunakan Unix, dibutuhkan library bernama libpcap.Supaya dapat menerima paket yang tidak ditujukan kepadanya, seseorang harus mengeset network adapter di promiscuous mode. Di mode ini, netork adapter akan menerima semua paiet tidak perduli alamat tujuannya. Keuntunngan dari promiscuous mode ini adalah mode ini memungkinkan kita untuk menrima lebih banyak paket yang dibutuhkan saat sniffing. Tapi ada juga kerugiannya yaitu mode ini dapat dideteksi, mode ini hanya bekerja pada peralatan non switch (non switch equipment) seperti hub. Ada tiga langkah utama dalam membuat sniiffer yaity mengeset device, membuka device dan menyaring data.

  Kata kunci: packet capturing, sniffer, socket programming Pendahuluan

  Sniffer adalah program dan/atau peralatan yang memonitor data yang berada di jaringan. Sniffer dapan digunakan baik untuk manajemen jaringan maupun untuk mencuri informasi dari jaringan. Di jaringan TCP/IP, bila seseorang mencuri (sniff) paket, dia disebut dengan sniffer (http://isp.webopedia.com/TERM/S/sniffer.html ).

  Sniffing di jaringan bukanlah barang yang baru.

  Hal ini biasanya dilakukan oleh network administrator untuk memonitor lalulintas jaringan. Ada banyak software sniffer yang tersedia baik yang gratis maupun yang komersial. Contohnya adalah WinSniff, Ethereal, Nmap, Snort, ntop, PacAnal, NetSpy, dan Sniffex. Software-software ini ditulis dalam berbagai bahasa seperti Java, C, C++ atau C# dan dijalankan bekerja di platform yang berbeda seperti Windows, Unix, atau Linux.

  Artikel ini akan menjelaskan langkah-langkah dalam menulis program sniffer menggunakan pcap (dalam bahasa C) dan menggunakan Jpcap ( dalam bahasa Java). Ada tiga langkah dalam menulis sniffer yaitu mengeset device, membuka device dan menyaring data.

  Artikel ini pada awalnya ditulis sebagai bagian dari laporan tugas kuliah Advanced Networking. Bersama laporan tersebut ada sebuah program sniffer yang ditulis dalam bahasa Java. Program itu sendiri tidak disertakan dalam tulisan ini karena keterbatasan tempat.

  Kebutuhan

  Untuk membuat sebuah sniffer yang dibutuhkan adalah pengetahuan dasar pemrograman disamping pengetahuan dasar jaringan. Jika seseorang akan membuat sniffer yang ditulis dengan Java, dia membutuhkan Jpcap atau pcap jika yang digunakan adalah bahasa lain seperti C atau C++. Jpcap adalah paket kelas Java (Java class

  package ) yang memungkinkan aplikasi Java

  untuk menangkap dan/atau mengirimkan paket ke jaringan. Jpcap didasarkan pada libcap/winpcap dan Raw Socket API. Oleh karena itu, Jpcap bisa bekerja pada semua sistem operasi dimana libpcap/ winpcap telah diimplementasikan. Sejauh ini, Jpcap telah dicoba pada FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, dan Microsoft Windows 2000/XP. Jpcap mendukung tipe-tipe paket berikut ini : Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, dan ICMPv4. Tipe paket lain

  10 Volume 2 No. 1, Maret 2015

  akan ditolak oleh network adapter karena paket- paket ini dikirimkan ke komputer (host) lain.

  Pengguna menentukan device dengan menuliskan nama device sebagai argumen pertama pada program diatas. String “dev” berisi nama interface yang akan di sniff dalam format yang dikenal oleh pcap.

  digunakan : #include <stdio.h> #include <pcap.h> int main(int argc, char *argv[]) { char *dev = argv[1]; printf("Device: %s\n", dev); return(0); }

  device . Potongan program berikut dapat

  Ketika pcap digunakan, ada dua teknik untuk mengeset device yang akan di sniff. Yang pertama adalah pengguna menentukan nama

  Mengeset device

  sniffer yaitu : mengeset device, membuka device untuk mendengarkan, dan menyaring data.

  Ada tiga langkah utama dalam menulis program

  system resource .

  Ketiga, pada jaringan dengan lalulintas yang padat, host tersebut akan membutuhkan banyak

  broadcasting untuk mengirimkan paket ke semua host yang berhubungan dengannya.

  akan menerima semua paket tidak peduli paket itu ditujukan untuk siapa (Nagareshwar, 2006). Keuntungan dari mode promiscuous ini adalah untuk sniffing. Tapi ada juga kelemahannya. Pertama, sniffing dengan mode promiscuous dapat dideteksi. Sebuah komputer (host) dapat mengetes untuk menentukan apakah host lain sedang melakukan promiscuous sniffing . Kedua, promiscuous sniffing hanya bekerja pada lingkungan non-switch seperti hub. Ini dikarenakan hub menggunakan teknik

  promiscuous . Pada mode ini, sebuah komputer

  Tapi orang dapat menerima paket-paket ini dengan mengubah network adapter ke mode

  adapter pada mode normal), paket-paket ini

  ditangkap sebagai raw pakets yang berisi seluruh data dari paket tersebut. Ini memungkinkan aplikasi Java untuk menganalisa tipe-tipe paket yang tidak didukung Jpcap. (http://netresearch.ics.uci.edu/kfujii/jpcap/doc/i ndex.html).

  Ketika sebuah komputer terhubung ke jaringan, paket dari manapun akan sampai pada komputer tersebut. Secara default (yaitu ketika network

  Cara Kerja

  bekerja pada lingkungan Unix atau Linux

  collection ), pengawasan keamanan (security monitoring ), network debugging, dsb. libpcap

  bawah. Aplikasi yang dapat dibuat mengguanakan libpcap antara lain pengumpulan data statistic jaringan (network statistics

  framework untuk monitor jaringan pada level

  pengguna. libpcap menyediakan portable

  interface untuk menangkap paket pada level

  Seperti WinPcap, libpcap juga merupakan

  dan network testers. Beberapa dari tool itu adalah Ethereal, Nmap, Snort, ntop yang sudah banyak digunakan orang

  detection system ), sniffers, traffic generators

  WinPcap adalah alat standar industri untuk mengakses jaringan melalui link layer pada lingkungan Windows. WinPcap memungkinkan aplikasi untuk menangkap dan mengirimkan paket tanpa melalui protocol stack dan mempunyai fitur tambahan yaitu menyaring paket pada kernel level, dan mampu menangkap paket dari jarak jauh (remote packet capture). WinPcap terdiri dari sebuah driver yang membantu sistem operasi untuk menyediakan akses jaringan pada level bawah, dan sebuah library yang digunakan untuk mengakses layer jaringan pada level bawah. Library ini juga berisi libpcap Unix API versi Windows. WinPcap adalah mesin (engine) untuk menangkap dan menyaring paket dari banyak alat (tool) baik open source maupun komersial termasuk diantaranya adalah penganalisa protocol (protocol analyzer ), pengawasan jaringan (network monitor), sistem pendeteksi penyusupan jaringan (network intrusion

  Baik pada Windows maupun Unix, seseorang WinPcap atau libpcap

  Teknik lainnya adalah sebagai berikut : #include <stdio.h> #include <pcap.h> int main(int argc, char *argv[]) {

  Metoda openDevice() mengembalikan referensi ke obyek Jpcap yang akan digunakan untuk menangkap. Pada langkah ini kita sudah mempunyai instance Jpcap, sehingga kita bisa mulai mendengarkan dengan memanggil baik

  } Potongan program ini membuka device yang disimpan pada string “somedev” dan membaca sejumlah byte tertentu seperti yang sudah ditentukan dalam BUFSIZ (yang didefinisikan dalam pcap.h). Program ini juga mengeset

  Jpcap jpcap = Jpcap.openDevice(deviceName, 1028, false, 10000);

  maksimum yang akan dibaca dari sebuah device pada suatu saat, nilai Boolean yang menyatakan apakah device akan di set ke mode promiscuous, dan nilai timeout yang akan digunakan jika metoda processPacket() dipanggil.

  device yang akan dibuka, jumlah byte

  dengan menggunakan metoda Jpcap.openDevice(). Metoda openDevice membutuhkan empat argument yaitu : nama

  device tersebut dapat dibuka untuk didengarkan

  Pada Jpcap, setelah memilih sebuah device,

  message .

  disimpan pada string errbuf. Program ini menggunakan errbuf untuk mencetak error

  device pada mode promiscuous dan melakukan sniffing hingga terjadi error, dan error ini akan

  BUFSIZ, 1, 1000, errbuf); if (handle == NULL) { fprintf(stderr, "Couldn't open device %s: %s\n", somedev, errbuf); return(2);

  11 Volume 2 No. 1, Maret 2015

  Sebagai contoh, potongan program berikut ini dapat digunakan : #include <pcap.h> ... pcap_t *handle; handle = pcap_open_live(somedev,

  tidak ada time out; tapi pada sebagian platform, nilai 0 bisa berarti orang boleh menunggu hingga jumlah paket yang ditangkap sudah mencukupi sebelum melihat paket-paket tersebut. Jadi time out seharusnya tidak 0). Terakhir, ebuf adalah string yang dapat mengembalikan session handler.

  read time out dalam milidetik (nilai 0 berarti

  Pada pcap, untuk membuat sesi sniffing sangatlah mudah. Untuk hal ini, pcap_open_live() dapat digunakan. Prototipe dari fungsi ini adalah sebagai berikut : pcap_t *pcap_open_live(char

  Membuka device untuk didengarkan

  String deviceName = devices[0];

  Kemudian, untuk dapat menangkap paket, kita harus memberitahu Jpcap, network device mana yang akan didengarkan. API menyediakan metoda jpcap.Jpcap.getDeviceList() untuk hal ini. Metoda ini mengembalikan array string dan cara mengguanakannya adalah sebagai berikut : String[] devices = Jpcap.getDeviceList(); Setelah kita mendapat daftar nama device, kita harus memilih salah satunya untuk didengarkan :

  } Ketika Jpcap digunakan, yang pertama harus dilakukan adalah membuat kelas yang mengimplementasikan interface jpcap JpcapHandler. public class JpcapTip implements JpcapHandler { public void handlePacket(Packet packet){ System.out.println(packet); } }

  %s\n", errbuf); } printf("Device: %s\n", dev); return(0);

  char *dev, errbuf[PCAP_ERRBUF_SIZE]; dev = pcap_lookupdev(errbuf); if (dev == NULL) { fprintf(stderr, "Couldn't find default device:

  • device, int snaplen, int promisc, int to_ms, char *ebuf) Argumen pertama adalah device yang sudah ditentukan pada langkah sebelumnya. snaplen adalah integer yang menentukan jumlah byte maksimum yang akan ditangkap oleh pcap. promisc, ketika di set true, akan mengeset interface ke mode promiscuous. to_ms adalah
  • handle pada contoh sebelumnya). Argumen berikutnya adalah referensi ke sebuah tempat untuk menyimpan filter yang sudah dikompilasi. Setelah itu adalah ekpresi itu sendiri dalam format string. Selanjutnya adalah integer yang menentukan apakah ekspresi harus di”optimalkan” atau tidak (0 berarti false, 1 berarti true). Terakhir, adalah menentukan net

  12 Volume 2 No. 1, Maret 2015

  processPacket ataupun loopPacket(). Kedua metoda tersebut membutuhkan dua argument : jumlah paket maksimum yang akan ditangkap (nilai -1 menandakan tidak ada batasan) dan

  instance dari sebuah kelas yang mengimplementasikan JpcapHandler.

  Jika processPacket() yang dipanggil, maka yang tercantum pada openDevice terlampaui atau jumlah paket maksimum telah tercapai. Sedang loopPacket() akan menangkap paket hingga jumlah paket maksimum tercapai atau menangkap terus jika tidak ada batas maksimum. Cara memanggilnya seperti berikut ini : jpcap.loopPacket(-1, new

  JpcapTip());

  Menyaring data

  Seringkali seseorang hanya tertarik pada data tertentu saja. Misalnya, orang ingin melakukna sniffing hanya pada port 23 (telnet) karena ingin mencari password. Atau mungkin orang ingin membajak sebuah file yang sedang dikirimkan melalui port 21 (FTP). Atau bahkan mungkin hanya lalulintas DNS (port 53 UDP) yang diinginkan. Apapun yang terjadi, sangat jarang orang melakukan sniffing semua data di semua lalulintas jaringan. Untuk hal ini, jika kita menggunakan pcap, pcap_compile() dan pcap_setfilter() dapat digunakan. Processnya sangat mudah. Setelah memanggil pcap_open_live() dan mempunyai sesi sniffing yang sudah bekerja, sebuah filter dapat diaplikasikan. Namun sebelum diaplikasikan, filter ini harus di kompliasi terlebih dulu. Untuk mengkompilasi, program pcap_compile() harus dipanggil. Prototipenya didefinisikan sebagai berikut : int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) Argumen pertama adalah sesi handle (pcap_t

  mask dari jaringan yang akan difilter. Fungsi

  ini mengembalikan -1 kalau gagal; dan sembarang nilai lainnya kalau berhasil. Setelah ekspresi ini dikompilasi, saatnya untuk mengaplikasikannya. Kita dapat menggunakan pcap_setfilter(). Prototipe dari pcap_setfilter adalah sebagai berikut : int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

  Argumen pertama adalah session handler, kedua adalah referensi ke ekspresi yang sudah dikompilasi. Apabila kita menggunakan Jpcap, penyaringan dapat dilakukan dengan menggunakan setFilter. Protipe dari setFilter adalah sebagai berikut : public void setFilter(java.lang.String filterExpression, boolean optimize) Argumen pertama, filterExpression, adalah ekspresi penyaringan (filter expression ). Misalnya, ekspresi “host techno” akan menyaring hanya paket yang dikirim atau diterima pada host bernama techno. Argumen kedua, optimize, menentukan apakah kode bpf yang dihasilkan akan dioptimalkan oleh libpcap secara internal atau tidak. Anda harus membuat, mengkompilasi dan mengaktivasi sebuah filter dari sebuah expresi penyaringan (filter expression). Berikut adalah contoh sebuah program sniffer sederhana menggunakan Jpcap : import jpcap.JpcapHandler; import jpcap.Jpcap; import jpcap.Packet; public class JpcapTip implements JpcapHandler { public void handlePacket(Packet packet){ System.out.println(packet); } public static void main(String[] args) throws java.io.IOException{ String[] devices = Jpcap.getDeviceList(); for (int i = 0; i < devices.length; i++) { System.out.println(devices[i] ); } String deviceName = devices[0];

  3513_11-5815384.htm. Akses terakhir 17 Jpcap jpcap = January 2006.

  Jpcap.openDevice(deviceName, 1028, false, 1); jpcap.loopPacket(-1, new JpcapTip()); } } yakin bahwa virtual machine dapat menemukan library asli (native library) Jpcap. Di Windows, jika jpcap.dll ada di direktori lib, perintah di Java akan tampak seperti berikut ini : java -Djava.library.path=lib -cp lib\jpcap.jar;. JpcapTip Sekarang saatnya bagi anda untuk membuah program sniffer.

  Kesimpulan

  Untuk membuat program sniffer, kita membutuhkan Jpcap atau pcap. Selain itu kita juga membutuhkan library WinPcap (pada lingkungan Windows) atau libpcap (pada lingkungan Unix). Supaya dapt menerima paket yang tidak ditujukan ke kita, kita adapt melakukannya dengan mengeset network

  adapter ke mode promiscuous. Pada mode ini,

  kita akan menerima paket apapun. Keuntungan dari mode promiscuous ini adalah mode ini menyediakan banyak paket untuk di sniff. Tapi ada tiga kekurangan dari mode ini. Pertama,

  sniffing dengan mode promiscuous dapat

  dideteksi. Sebuah komputer (host) dapat mengetes untuk menentukan apakah host lain sedang melakukan promiscuous sniffing . Kedua, promiscuous sniffing hanya bekerja pada lingkungan non-switch seperti hub. Ini dikarenakan hub menggunakan teknik

  broadcasting untuk mengirimkan paket ke semua host yang berhubungan dengannya.

  Ketiga, pada jaringan dengan lalulintas yang padat, host tersebut akan membutuhkan banyak

  system resource .

  Referensi Carsten, Tim. 2006. Programming with pcap.

  Error! Bookmark not defined.. Akses terakhir, 17 January 2006.

  Nagareshwar. 2006. WinSniff, Packet Capturing Application for Windows.

  "http://www.codeproject.com/internet/Win Sniff.asp". Akses terakhir 17 January

  2006. TechRepublic. 2006. How Jpcap Works.

  http://techrepublic.com.com/5100-

  13 Volume 2 No. 1, Maret 2015