Python İle Scapy Kütüphanesi Kullanarak Ağ Paketi Analizi Nasıl Yapılır?

Python İle Scapy Kütüphanesi Kullanarak Ağ Paketi Analizi Nasıl Yapılır?
Python İle Scapy Kütüphanesi Kullanarak Ağ Paketi Analizi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Scapy kütüphanesi ile çalışmaya başlamadan önce, sisteminizde Python 3.10 veya daha yeni bir sürümün yüklü olması önerilir. Scapy, düşük seviyeli ağ işlemlerine erişim sağladığı için işletim sisteminizde yönetici (root veya administrator) yetkilerine ihtiyaç duyar.

Kurulum için terminalinizde veya komut satırınızda aşağıdaki komutu kullanabilirsiniz:

pip install scapy

Kurulumun başarılı olduğunu doğrulamak için Python etkileşimli kabuğunda import scapy komutunu çalıştırabilirsiniz. Ayrıca, ağ paketlerini yakalayabilmek için Windows kullanıyorsanız Npcap, Linux kullanıyorsanız libpcap sürücülerinin sisteminizde yüklü olduğundan emin olmalısınız.

Kritik Uyarı: Ağ paketlerini izlemek ve analiz etmek, yalnızca kendi ağınızda veya yetkiniz olan sistemlerde yapılmalıdır. Yetkisiz ağ izleme işlemleri yasal sorumluluk doğurabilir ve etik kurallara aykırıdır.

Scapy ile Temel Paket Yakalama

Scapy ile ağ trafiğini dinlemenin en temel yolu sniff() fonksiyonunu kullanmaktır. Bu fonksiyon, ağ arayüzünden gelen paketleri belirli bir süre veya miktar boyunca yakalar. Aşağıdaki örnek, ağınızdaki ilk 10 paketi yakalar ve özetlerini ekrana yazdırır.

from scapy.all import sniff

def paket_yazdir(paket):
    print(paket.summary())

# İlk 10 paketi yakala ve paket_yazdir fonksiyonuna gönder
sniff(count=10, prn=paket_yazdir)

Bu kodda prn parametresi, yakalanan her paket için çağrılacak geri çağırma (callback) fonksiyonunu belirtir. summary() metodu ise paketin protokol katmanlarını kısa bir şekilde özetler.

Paket Filtreleme Teknikleri

Ağ trafiği genellikle çok yoğundur ve sadece belirli paketleri incelemek isteyebilirsiniz. Scapy, BPF (Berkeley Packet Filter) sözdizimini destekler. Bu sayede sadece HTTP, TCP veya belirli bir IP adresine ait paketleri filtreleyebilirsiniz.

from scapy.all import sniff

# Sadece TCP paketlerini yakala
sniff(filter="tcp", count=5, prn=lambda x: x.summary())

# Sadece belirli bir IP adresine gelen paketleri yakala
sniff(filter="host 192.168.1.1", count=5, prn=lambda x: x.summary())

Filtreleme, gereksiz verileri ayıklayarak analiz sürecinizi hızlandırır ve odaklanmanızı kolaylaştırır. filter parametresi, standart tcpdump filtreleme kuralları ile aynı mantıkta çalışır.

Paket Katmanlarını Çözümleme

Scapy'nin en güçlü yanı, paketleri katmanlarına (Layer) ayırabilmesidir. Ethernet, IP, TCP ve UDP gibi katmanlara erişerek verilerin içeriğini inceleyebilirsiniz. Aşağıdaki örnek, yakalanan bir paketin IP katmanındaki kaynak ve hedef adreslerini nasıl alacağınızı gösterir.

from scapy.all import sniff, IP

def detayli_analiz(paket):
    if paket.haslayer(IP):
        ip_src = paket[IP].src
        ip_dst = paket[IP].dst
        print(f"Kaynak: {ip_src} -> Hedef: {ip_dst}")

sniff(filter="ip", count=10, prn=detayli_analiz)

haslayer(IP) metodu, paketin bir IP katmanı içerip içermediğini kontrol eder. Bu yöntem, hatalı paketlerin analiz sırasında programınızı çökertmesini engellemek için kritik bir güvenlik önlemidir.

Özelleştirilmiş Paket Oluşturma ve Gönderme

Paket analizi sadece dinlemekle sınırlı değildir; bazen ağın nasıl tepki verdiğini anlamak için özel paketler oluşturup göndermeniz gerekir. Scapy ile bir ICMP (ping) paketi oluşturmak oldukça basittir.

from scapy.all import IP, ICMP, sr1

# 8.8.8.8 adresine bir ICMP paketi gönder ve cevabı bekle
paket = IP(dst="8.8.8.8")/ICMP()
cevap = sr1(paket, timeout=2)

if cevap:
    print("Cevap alındı:")
    cevap.show()
else:
    print("Cevap alınamadı.")

sr1() fonksiyonu, paketi gönderir ve gelen ilk cevabı bekler. Bu yöntem, ağdaki cihazların ulaşılabilirliğini test etmek için yaygın olarak kullanılır.

Ağ Analiz Yöntemlerinin Karşılaştırılması

Yöntem Avantaj Dezavantaj
Sniffing (Dinleme) Pasif, iz bırakmaz. Şifreli veriyi okuyamaz.
Packet Injection (Enjeksiyon) Aktif test imkanı sağlar. Ağda tespit edilebilir.
Layer Analysis Detaylı veri sağlar. Yüksek CPU tüketebilir.

Güvenlik ve Debug İpuçları

Ağ analizi yaparken dikkat etmeniz gereken en önemli husus, verilerin doğruluğudur. Ağdaki düzensiz paketler veya parçalanmış (fragmented) paketler analiz araçlarını yanıltabilir. Debug yaparken packet.show() komutunu kullanarak paketin tüm katmanlarını ve alanlarını detaylıca inceleyebilirsiniz.

Güvenlik Sorumluluk Reddi: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Ağ trafiğine müdahale etmek, sistemlerin kararlılığını bozabilir. Üretim ortamlarında (production) bu tür araçları kullanmadan önce mutlaka gerekli izinleri almalı ve ağ mimarisini göz önünde bulundurmalısınız.

Sıkça Sorulan Sorular

Scapy neden root yetkisi istiyor?

Scapy, ağ kartına doğrudan erişim sağlayarak ham paketler oluşturur ve okur. Bu işlem işletim sistemi tarafından düşük seviyeli bir işlem olarak kabul edildiği için güvenlik gerekçesiyle yönetici yetkisi gerektirir.

Scapy ile şifreli trafiği (HTTPS) çözebilir miyim?

Hayır, Scapy ağ paketlerini yakalar ancak TLS/SSL ile şifrelenmiş verilerin içeriğini (Payload) şifreleme anahtarları olmadan okuyamaz. Sadece paket başlıklarını ve meta verilerini analiz edebilirsiniz.

Sniff fonksiyonu neden paketleri kaçırıyor?

Eğer ağ trafiği çok yoğunsa, Python'un işleme hızı gelen paketleri yakalamaya yetmeyebilir. Bu durumda sniff() yerine daha düşük seviyeli kütüphaneler veya çoklu iş parçacığı (threading) kullanmanız gerekebilir.

Scapy, Wireshark ile birlikte kullanılabilir mi?

Evet, Scapy ile yakaladığınız paketleri wrpcap() fonksiyonu ile .pcap dosyasına kaydedebilir ve daha sonra bu dosyayı Wireshark ile görsel olarak analiz edebilirsiniz.

Hangi protokolleri Scapy ile analiz edebilirim?

Scapy, Ethernet, IP, TCP, UDP, ICMP, ARP, DNS ve DHCP gibi yüzlerce protokolü destekler. Kendi özel protokollerinizi de Scapy'nin katman yapısını genişleterek tanımlayabilirsiniz.

Scapy ile Otomatik Ağ Trafiği İzleme ve Loglama

Scapy'nin sunduğu esnek yapıyı kullanarak, ağınızdaki belirli bir protokolü sürekli izleyen ve bu verileri analiz edilebilir bir formatta saklayan bir sistem kurabilirsiniz. Aşağıdaki örnek, ağdaki tüm TCP paketlerini yakalayıp, kaynak ve hedef IP adreslerini bir metin dosyasına düzenli bir şekilde kaydeden bir otomasyon scriptidir.

from scapy.all import sniff, TCP, IP

def log_packet(packet):
    if packet.haslayer(TCP):
        src_ip = packet[IP].src
        dst_ip = packet[IP].dst
        sport = packet[TCP].sport
        dport = packet[TCP].dport
        log_entry = f"TCP Trafik: {src_ip}:{sport} -> {dst_ip}:{dport}\n"
        
        with open("network_log.txt", "a") as f:
            f.write(log_entry)
            print(f"Loglandı: {src_ip} -> {dst_ip}")

print("Trafik izleme başlatıldı...")
sniff(filter="tcp", prn=log_packet, store=0)

Bu kod bloğunda store=0 parametresi, yakalanan paketlerin bellekte tutulmasını engeller. Bu sayede uzun süreli ağ izleme işlemlerinde sistemin RAM kullanımını minimum düzeyde tutmuş olursunuz.

Performans Optimizasyonu ve Büyük Veri İşleme

Yüksek trafikli ağlarda Scapy kullanırken performans darboğazları yaşanabilir. Scapy, Python tabanlı olduğu için çok yüksek hızlarda paket işleme konusunda C tabanlı araçlar (libpcap gibi) kadar hızlı değildir. Ancak, aşağıdaki yöntemlerle performansı optimize edebilirsiniz:

  • BPF Filtrelerini Kullanın: sniff() fonksiyonu içerisinde BPF (Berkeley Packet Filter) filtrelerini kullanmak, Python tarafına gereksiz paketlerin geçmesini engeller ve CPU yükünü ciddi oranda düşürür.
  • Multiprocessing Entegrasyonu: Ağ analizini tek bir çekirdek yerine, paketleri kuyruğa alıp farklı işlemcilerde işleyen bir yapı kurarak ölçeklendirebilirsiniz.
  • Sadece İhtiyaç Duyulan Katmanları Çözümleyin: packet.decode() veya packet.summary() yerine, sadece ihtiyacınız olan alanlara (örneğin packet[IP].src) doğrudan erişin.

Hata Ayıklama İpuçları

Scapy ile çalışırken karşılaşılan en yaygın sorunlar genellikle yetkilendirme veya yanlış arayüz seçimidir. Eğer paket yakalayamıyorsanız, sisteminizdeki aktif ağ arayüzlerini şu komutla listeleyerek doğru arayüzü iface parametresi ile belirttiğinizden emin olun:

from scapy.all import get_if_list
print(get_if_list())

Ayrıca, conf.verb = 0 komutunu scriptinizin başına ekleyerek Scapy'nin konsola bastığı gereksiz bilgilendirme mesajlarını gizleyebilir, kendi hata ayıklama çıktılarınıza odaklanabilirsiniz.

Sonuç

Python ile Scapy kütüphanesini kullanarak ağ paketlerini analiz etmek, ağın çalışma prensiplerini anlamak için eşsiz bir yoldur. Bu rehberde, paket yakalamadan özel paket oluşturmaya kadar temel adımları tamamladınız. Bir sonraki adım olarak, yakaladığınız paketleri bir veritabanına kaydeden veya şüpheli trafik hareketlerini tespit ettiğinde uyarı veren bir "IDS" (Saldırı Tespit Sistemi) prototipi geliştirmeyi deneyebilirsiniz. Ağ güvenliği, sürekli pratik gerektiren bir alandır; bu yüzden kendi yerel ağınızda farklı senaryolar deneyerek yetkinliğinizi artırmayı sürdürün.

Bu yazıya tepkinizi paylaşın:
Zeynep Kaya

Ev ekonomisi ve kişisel organizasyon üzerine birçok yayın yönettim. Okuyucuların günlük yaşam kalitesini artıracak uygulanabilir çözümler üretmeyi hedefliyorum.

Yorumlar (0)

Yorum Yaz