Introduction to Scapy
untuk membat sebuah network scanner, insyaAllah kita akan menggunakan pustaka jaringan dari python, yaitu scapy. Pustaka tersebut didesain untuk send, sniff, dissect, dan meng-edit network packets. Scapy adalah alat yang sangat powerfull yang dapa memanipulasi packet jaringan.
Understanding how Scapy works
Pada bagian catatan ini, insyaAllah kita akan membuat sebuah request PING sederhata ke sebuah website. Ping request biasanay digunakan untuk menguji apakah device tertentu tersedia atau tidak. Request tersebut menggunakan ICMP application layer protocol. untuk menggunakan package tersebut maka kita harus mengimport dari pustaka scapy seperti snipshet dibawah ini.
Code
*
, disini saya mengimport semua method dari pustaka scapy, namun baiknya hanya mengimport method yang digunakan saja.
reate IP Layer Packet
Untuk mengirim ping request, pertama kitaharus membuat sebuah IP layer packet
, yang mana pada layer tersebut kita akan memasang source
dan destination
IP address. Sebelum itu, kita harus meng-import method IP
dari pustaka scapy.
Ingat, IP layer yang kita buat diatas masih berupa layer packet saja, namun belum dikirim. Untuk mengirim dan menerima packet kita harus menggunakan method sr1
.
Selanjutnya, insyaAllah kita akan mendefinisikan IP address tujuan. Kita ingin membuat ping reqeust ke www.vensys.co.id. Kita dapat secara manual menuliskan IP address, namun bisa juga langsung menuliskan Fully qualified domain name (FLQD) karena scapy akan secara otomatis merubahnya ke dalam IP address.
Baik, sekarang kita akan membuat IP layer packet dan menampilkan nya untuk melihat isi dari packet tersebut
Code
Kode diatas kita membat sebuah IP layer packet dan menampilkan konten dari paket tersebut.
Note: paket tersebut belum dikirim.
Lihatlah src
dan dst
. Pada destination (dst
) adalah instance dari Net()
, yang mana, scapy akan menangain translasi dari FQDN ke IP addressnya. Coba perhatikan hasil ouput IP layer tersebut, maka akan mirip dengan struktur IP layer pada ip header.
Send ICMP (Internet Control Message Protocol) request
Selanjutnya, untuk mengirim ICMP request, kita dapat menggunakan class untuk membuat sebuah instance seperti dibawah ini:
id=100
membantu protocol untuk melacak packets. Untuk melihat field-field yang ada pada request ICMP menggunakan method show()
.
Code
Dari output diatas, kita dapat melihat tipe packet adalah echo-request, yang mana digunakan untuk menguji ketersedian konektivitas.
Combine IP layer and ICMP request
Dari diskusi sebelumnya, kitatelah ketahui, application layer
duduk diatas dari IP layer
1, dan alhamdulillah kita telah membuat dua layer. Sekarang kita akan menjadikan dua layer tersebut (IP layer, ICMP request layer) menjadi satu packet yang nantinya akan kita kirim melalui network.
Untuk menggabungkan layer-layer menjadi satu buah packet tunggal gunakan operator slash, /
yang diawali dengan layer yang palin bawah terlebih dahulu. IP layer lebih rendah dari pada Application layer (ICMP request)
Code
Fungsi show()
akan menampilkan daftar field dari packet hasil kombinasi IP layer dan ICMP request layer.
Output
Sekarang kita bisa mengirim packet tersebut. Untuk mengirimnya, kita dapat menggunakan method sr1
Code
Respone nya akan seperti dibawah ini;
Output
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 28
id = 29076
flags =
frag = 0
ttl = 56
proto = icmp
chksum = 0xf24c
src = 202.52.146.211
dst = 192.168.1.80
\options \
###[ ICMP ]###
type = echo-reply
code = 0
chksum = 0x0
id = 0x0
seq = 0x0
unused = ''
Dapat anda lihat pada sesi ICMP Respone diatas, tipe dari respone tersebut adalah echo-reply
dan pada sesi IP field src
dan dst
adalah kebalikan dari scr
dan dst
dari request packet yang baru saja kita kirim.
Info
Yang menjadikan Scapy sangat powerill adalah, scapy mampu membuat raw_packets, yang mana artinya kita dapat membuat sebuah packet dengan informasi yang salah dan tidak ada mekaniska pengujian pada protokol yang digunakan. Kita dapat mengganti src
dan memasukan packet lain, dan pada kasus tertentuk, komputer tujuan tidak mengetahio komputer mana yang membuat packet ini (idle scan). Karena inilah kita dapat spoof packet.
-
Lihat pada OSI layer di networking model dan pada bagian data encapsulation ↩