Scapy – Nedir, Ne işe yarar ? Paket Gönderme, Paket Yakalama

Scapy Python ile kodlanmış Linux’da Terminal ekranı yani komut satırından çalışan bir araçtır, dolayısıyla kullanılacak sistemde Python yüklü olması çalışması için zorunludur.

Aynı zamanda bir python kütüphanesidir, Python ile kodlama yaparken kodunuza import edebilirsiniz.

Amacı çeşitli network paketleri oluşturmak, göndermek ve yakalamaktır ve daha sayamadığım bir çok şey. Network testlerinde kullanılabilir.

Fakat Scapy’yi diğer araçlardan ayıran bir özelliği vardır. Esnek bir yapıya sahiptir bu da demek oluyor ki diğer araçlar gibi sınırları yoktur. Yalnızca aracı yazan yazılımcı sınırları belirler ve o doğrultudan şaşamazsınız. Ama Scapy öyle değildir. Örneğin: Nmap ile tarama yapabilirsiniz fakat TCP paketi üreterek tarama yapamazsınız. Bunun gibi birçok örnek sunulabilir. Sıkıldığınızı düşünerek hemen konuya gireceğim kısaca Scapy ile ağlarda bir şey yapacağınız zaman bunu Scapy’nin anlayacağı şekilde yazmanız amacınıza ulaştırmada yeterli olacaktır.

Kali Linux kullanıyorsanız Terminal ekranına scapy yazarak açabilirsiniz, Windows’a yüklemiş iseniz komut satırından yüklenen dizine gelinerek ./run_scapy yazarak açabilirsiniz. Tavsiyem Linux veya Debian tabanlı OS kullanmanız, ben Kali Linux kullanıyorum.

Scapy aracını açalım.

scapy

Bize “>>>” döndürdü, demek oluyor ki bizden komut veya fonksiyon bekliyor.

Biz de “ls()” fonksiyonunu kullanarak protokolleri listeleyelim.

ls()

Şimdi de “ls(protokol_adi)” ile listelediğimiz protokollerden herhangi biri hakkında detaylı bilgi alalım.

ls(protocol_adi)

Peki Scapy kullanırken hangi parametreleri kullanabiliriz ? Bunları görüntülemek için “lsc()” adlı fonksiyonumuzu yazıyoruz. Kullanabileceğimiz parametreleri çıktı olarak döndürüyor.

lsc()

Ama kullanırken bazı ayarları parametrelere uygulamamız gerekecek ya da ayarları görüntülememiz bunlar hakkında yorum yapmamız gerekecek bunun için de “conf” parametresinden yararlanacağız.

conf

Bunlar Scapy aracının temel fonksiyonları. Kafanız karıştıysa çok fazla takılmayın. Yığılma bilgilere konu anlaşılacaktır. Nasıl paket oluşturacağımıza bir göz atalım.

packet = (IP(dst=”hedef_ip”)/TCP(dport=80,flags=”FS”))” bunu incelersek dst yani “destination” hedef anlamına geliyor, hedef bir ip adresi belirtiyoruz. Göndereceğimiz paketi Flags yani “bayraklar” ile birleştiriliyor “FS (FIN-SYN)” ki bu bayraklar TCP sistemlerinin çalışmasını yürütür( bağlantının başlaması, bitmesi gibi durumlar). “Dport” yani “destination port” hedefe hangi port üzerinden göndereceğini belirliyor. İsterseniz “sport” yani “Source Port” kaynak portu, sizden çıkan paketin hangi port üzerinden çıkacağını da belirtebilirsiniz belirtmez iseniz default (varsayılan) olarak 80 portundan gönderir. Ve bu paket “packet” adlı değişkene atanıyor ki daha sonra kullanılabilsin.

packet.show()” fonksiyonu ile “packet” adlı değişkenin paket içeriğini ekrana bastırıyor.

packet.show()

Sıra geldi bu oluşturduğumuz paketi göndermeye. Gönderme işlemin farklı yolları vardır bunlar şunlardır;

Send() -> Layer 3 üzerinden gönderir.

Sendp() -> Layer 2 üzerinden gönderir.

(sr -> send and receive paketi yollamak için)

Sr() -> Cevap olarak ICMP Reply dönderilir. Unans değeri içerir.

Sr1() -> Cevap olarak ICMP Reply gönderir. Unans değeri içermez.

Srp() -> Cevap olarak ICMP Reply dönderilir. Unans değeri içerir. Layer 2 de manipülasyon yapmaya olanak verir.

Srp1() -> Cevap olarak ICMP Reply dönderilir. Unans değeri içermez. Layer 2 de manipülasyon yapmaya olanak verir.

send(packet) , sendp(packet) , sr1(packet)

Göndermek için parantez içerisinde önceden belirlediğimiz aracın geçici hafızasında tuttuğu değişkeni gireriz. Ve gönderme başarılı. Hazırladığımız paketler çeşitli gönderme yolları ile hedefe ulaştı !

Şimdi paket gönderdik ettik yaptık ama Scapy bu kadarla sınırlı değil aynı zamanda paket yakalayabilir. Esnek yapısı sayesinde nasıl paket yakalayacağı, kaç paket yakalayacağı gibi özellikleri kendiniz ihtiyaçlarınıza göre belirlersiniz.

Ben size örnek amacı ile PING yani ICMP paketi göndererek bu özelliğini test edeceğim.

sniffing = sniff(iface=’interfaceadresi’, count=5, filter=’icmp’)

Komutumuzu incelersek; ‘interfaceadresi’ adlı interfaceimizden geçen 5 adet icmp paketi bekliyor ve eğer yakarsa “sniffing” adlı değişkene atıyor. Anlamına geliyor. Interface kısmını kendinize göre düzenlemeniz gerekmektedir. Terminal’e yazacağınız ‘iwconfig’ yada ‘ifconfig’ komutu ile görebilirsiniz (genelde eth0 veya wlan0 olur).

sniffing = sniff(iface=’eth0′, count=5, filter=’icmp’)

Yakalayana kadar bekleyecek ve yakaladıktan sonra “>>>” işareti ile bize yakaladığını ve komut beklediğini bildirecek.

Scapy aracı 5 Adet ICMP paketi yakaladı şimdi de bizden komut bekliyor, bizim isteklerimize göre ilerleyebiliriz. Scapy tüm esnekliği sunmuş durumda, “sniffing” adlı değişkene yakaladığı paketleri atamıştı şimdi de o paketleri ayrıntılı bir şekilde inceleyelim.

sniffing.nsummary, sniffing.show(), pkt1=sniffing[0], pkt1.show()

İşte bunlar da yakaladığımız paketlerin ayrıntıları.

Bu seferlik bu kadar. Scapy ile sınırlarımızı zorlamaya devam edeceğiz. Bir sonraki makaleye kadar iyi günler, bugsız kodlamalar.

Yorum bırakın