Filter Di WinPcap: Nilai Tambah Sebuah Library


Program PING di tulisan sebelumnya baru sampai mengirim ECHO REQUEST saja. Untuk melengkapinya, aku akan mencoba menambahkan kode untuk membaca ECHO REPLY. Tapi kali ini tidak dengan memakai callback karena ada cara lain yang lebih tepat, yaitu dengan menggunakan fungsi pcap_next_ex() yang men-capture packet sesuai kebutuhan saja. Ini adalah contoh kode program yang aku buat:

int status;
while ((status=pcap_next_ex(handle, &header, &packetData))>=0) {
  if (status==0) break;
  struct ECHO_REPLY *echoReply = (struct ECHO_REPLY*)((void*)packetData);
  printf("Menerima ECHO REPLY dengan sequence %d.\n", echoReply->icmp_sequence);
  printf("Data ECHO:\n");
  for (int i=1; i<=32; i++) {     printf("%02x ", echoReply->icmp_data[i-1]);
    if (i%8==0) printf("\n");
  }
  printf("\n");
}

Fungsi pcap_next_ex() akan mengembalikan nilai 1 jika packet dibaca tanpa masalah, nilai 0 jika timeout, nilai -1 jika terjadi error, dan nilai -2 jika EOF saat membaca offline capture. Setelah membaca sebuah packet, aku menampikan nilai icmp_sequence dan juga data yang disisipkan bersama packet ICMP ECHO tersebut.

Sampai disini, akan ada satu masalah! pcap_next_ex() akan mencapture semua paket yang lalu-lalang di network card, baik yang dikirim keluar maupun dikirim masuk, baik TCP, UDP maupun ICMP. Padahal kode program di atas langsung mengandaikan bahwa packet yang diterima adalah packet ICMP ECHO REPLY dari IP tertentu yang dikirim ke komputer ini. Di saat-saat seperti ini, fitur filter milik WinPcap sangat dibutuhkan. Fitur ini dapat menyaring packet apa saja yang akan diterima oleh aplikasi berdasarkan ekspresi boolean yang aku tentukan lewat kode program. Untuk itu, aku harus melibatkan dua fungsi, yaitu pcap_compile() dan pcap_setfilter(). Fungsi pcap_compile() akan menerjemahkan ekspresi dalam bentuk teks ke dalam byte code, kemudian pcap_setfilter() akan menerapkan byte code tersebut. Berikut ini adalah contoh penggunaan pcap_compile():

if (pcap_compile(handle, &filterCode,
  "icmp[icmptype] = 0 and icmp[icmpcode] = 0 and src host 192.168.1.1", 1, 0) < 0) {
  printf("ERROR Compiling Filter\n");
  pcap_close(handle);
  exit(EXIT_FAILURE);
}

filterCode disini adalah sebuah struct bpf_program yang merepresentasikan filter yang sesungguhnya. Parameter terakhir seharusnya berupa network mask (seperti 0xffffff untuk 255.255.255.0). Nilai ini hanya dibutuhkan untuk menyaring packet broadcast, dan karena aku tidak membutuhkan packet broadcast maka aku mengabaikan nilai ini. Lalu ekspresi untuk filter dengan jelas menyatakan untuk hanya menampilkan packet ICMP dengan field icmptype = 0 dan icmpcode = 0 (atau dengan kata lain, ECHO REPLY), dan dengan source address dari 192.168.1.1.

Setelah melakukan proses compile, aku dapat menerapkan filter seperti pada kode berikut:

if (pcap_setfilter(handle, &filterCode) < 0) {
  printf("ERROR Setting Filter\n");
  pcap_close(handle);
  exit(EXIT_FAILURE);
}

Setelah menambahkan fungsi pcap_compile() dan pcap_setfilter() sebelum pcap_next_ex(), akhirnya program PING sederhana ini selesai juga. Saatnya beralih ke topik berikutnya.

Perihal Solid Snake
I'm nothing...

2 Responses to Filter Di WinPcap: Nilai Tambah Sebuah Library

  1. anton toni mengatakan:

    gmana netcut q kx tdk bs di install yow!
    hbs diinstall bisa tp di buka g bisa!
    ad tulisan
    This application has failed to start because WanPAcket.dll was not found ,Re-installing the application may fix this problem

  2. solidsnake99 mengatakan:

    Download WinPCap di alamat ini: http://www.winpcap.org/install/bin/WinPcap_4_0_2.exe. Setelah itu jalankan program tersebut untuk melakukan installasi.
    Kemudian, periksa apakah di folder C:\WINDOWS\System32 terdapat file bernama WanPacket.dll.
    Lalu coba jalankan ulang NetCut. Gud luck.

Apa komentar Anda?

Please log in using one of these methods to post your comment:

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

%d blogger menyukai ini: