Giriş: Ağ Trafiği Analizinin Önemi
Günümüz dijital dünyasında ağlar, işletmelerin ve bireylerin temel yaşam damarı haline gelmiştir. İnternet üzerinden gerçekleştirilen her etkileşim, bir dizi ağ trafiği paketi aracılığıyla taşınır. Bu trafik akışını anlamak, sorun giderme, ağ performansını optimize etme, güvenlik zafiyetlerini tespit etme ve hatta kötü amaçlı faaliyetleri ortaya çıkarma gibi kritik görevler için vazgeçilmezdir. Ağ trafiği analizi, bu paketleri yakalayıp inceleyerek ağ üzerinde neler olup bittiğine dair derinlemesine bir bakış sunar. Geleneksel olarak Wireshark gibi özel araçlar kullanılırken, Python programlama dili, esnekliği, zengin kütüphane ekosistemi ve otomasyon yetenekleri sayesinde ağ trafiği analizi için güçlü bir alternatif sunmaktadır. Bu rehberde, Python'ın ağ trafiği analizindeki rolünü ve özellikle Scapy kütüphanesinin sağladığı imkanları ayrıntılı olarak inceleyeceğiz.
Neden Python ile Ağ Trafiği Analizi?
Python, ağ programlama ve veri analizi alanında oldukça popülerdir. Bunun başlıca nedenleri şunlardır:
Scapy: Ağ Paketleri ile Oynamanın Sanatı
Scapy, Python tabanlı, güçlü ve interaktif bir paket manipülasyon programıdır. Paket yakalama (capture), paket oluşturma (crafting), paket enjeksiyonu (injection) ve paket analizini (analysis) destekler. Güvenlik uzmanları, ağ yöneticileri ve araştırmacılar için paha biçilmez bir araçtır. Scapy ile, mevcut ağ protokollerini ayrıştırabilir, kendi özel protokollerinizi tanımlayabilir veya paketleri değiştirip ağa geri gönderebilirsiniz.
Kurulum:
Scapy'yi kurmak oldukça basittir. Genellikle `pip` aracı kullanılır:
Bazı sistemlerde ek bağımlılıklar gerekebilir (örneğin, `libpcap-dev` veya `Npcap` Windows için).
Temel Paket Yakalama:
Scapy'nin en temel özelliklerinden biri ağ arayüzünden paket yakalamaktır. `sniff()` fonksiyonu bu amaçla kullanılır.
`sniff()` fonksiyonu ile birçok filtreleme seçeneği kullanılabilir. BPF (Berkeley Packet Filter) söz dizimi geçerlidir.
Paket İncelemesi:
Yakalanan paketler bir liste objesi gibi davranır ve her paket ayrı ayrı incelenebilir.
Paket katmanlarına `packet[LayerName]` ile erişilir. Örneğin, `packet[Ether]` Ethernet katmanını, `packet[IP]` IP katmanını ve `packet[TCP]` veya `packet[UDP]` taşıma katmanlarını temsil eder.
Paket Oluşturma (Crafting):
Scapy'nin en güçlü yönlerinden biri, özel paketler oluşturabilme yeteneğidir. Bu, penetrasyon testleri, ağ protokolü testi veya özel iletişim senaryoları için kullanılabilir.
`IP()`, `TCP()`, `UDP()`, `Ether()` gibi sınıflar, ilgili protokol katmanlarını temsil eder. Bu katmanlar `/` operatörü ile birleştirilerek tam bir paket oluşturulur.
PCAP Dosyaları ile Çalışma:
Wireshark veya tcpdump gibi araçlarla yakalanan `.pcap` veya `.pcapng` dosyalarını Scapy ile okuyabilir ve analiz edebilirsiniz. Benzer şekilde, Scapy ile yakaladığınız veya oluşturduğunuz paketleri bu formatlarda kaydedebilirsiniz.
Yukarıdaki örnek görselde hipotetik bir ağ akışı şematize edilmiştir.
İleri Düzey Analiz ve Kullanım Senaryoları
Scapy, sadece temel paket yakalama ve oluşturmanın ötesinde, çok daha karmaşık analizler yapmanıza olanak tanır.
Protokol Ayrıştırma ve Katmanlara Erişim:
Scapy, paket içindeki her bir protokol katmanını otomatik olarak ayrıştırır. Bu, belirli bir protokole özgü alanlara kolayca erişmenizi sağlar.
Saldırı Tespiti ve Güvenlik Analizi:
Python ve Scapy, ağ güvenliği alanında birçok uygulama bulur. Örneğin, ağdaki anormal trafik kalıplarını tespit etmek, belirli saldırı imzalarını (SYN flood, port taraması vb.) belirlemek veya IDS/IPS (Intrusion Detection/Prevention System) benzeri basit araçlar oluşturmak mümkündür.
Bu tür senaryolarda `prn` (packet_received_callback) parametresi çok kullanışlıdır. Yakalanan her paket için belirtilen fonksiyonu çalıştırır.
Ağ Performans İzleme:
Paket boyutlarını, gecikmeleri (latency), paket kayıplarını (packet loss) izleyerek ağ performansını ölçmek mümkündür. Örneğin, belirli bir uygulama trafiğinin ortalama gecikme süresini hesaplayabilir veya yüksek bant genişliği kullanan akışları belirleyebilirsiniz.
Özel Protokol Geliştirme ve Testi:
Scapy, henüz desteklenmeyen veya özel olarak geliştirilmiş bir protokolü ayrıştırmak veya oluşturmak için de kullanılabilir. Kendi katmanlarınızı tanımlayarak, mevcut ağ analiz araçlarının yapamayacağı şeyleri yapabilirsiniz.
Diğer Python Kütüphaneleri:
Sonuç
Python, ağ trafiği analizi için son derece güçlü ve esnek bir platform sunar. Özellikle Scapy kütüphanesi, ağ mühendislerine, güvenlik uzmanlarına ve araştırmacılara ağ paketleri üzerinde tam kontrol sağlama yeteneği verir. Paket yakalamadan paket oluşturmaya, güvenlik analizinden performans izlemeye kadar geniş bir yelpazede görevleri otomatikleştirebilir ve derinlemesine incelemeler yapabilirsiniz. Bu yetenekler, modern ağların karmaşıklığı karşısında vazgeçilmez bir araç haline gelmiştir. Unutulmamalıdır ki, ağ trafiği analizi yetenekleri etik ve yasal sınırlar içinde kullanılmalıdır.
Günümüz dijital dünyasında ağlar, işletmelerin ve bireylerin temel yaşam damarı haline gelmiştir. İnternet üzerinden gerçekleştirilen her etkileşim, bir dizi ağ trafiği paketi aracılığıyla taşınır. Bu trafik akışını anlamak, sorun giderme, ağ performansını optimize etme, güvenlik zafiyetlerini tespit etme ve hatta kötü amaçlı faaliyetleri ortaya çıkarma gibi kritik görevler için vazgeçilmezdir. Ağ trafiği analizi, bu paketleri yakalayıp inceleyerek ağ üzerinde neler olup bittiğine dair derinlemesine bir bakış sunar. Geleneksel olarak Wireshark gibi özel araçlar kullanılırken, Python programlama dili, esnekliği, zengin kütüphane ekosistemi ve otomasyon yetenekleri sayesinde ağ trafiği analizi için güçlü bir alternatif sunmaktadır. Bu rehberde, Python'ın ağ trafiği analizindeki rolünü ve özellikle Scapy kütüphanesinin sağladığı imkanları ayrıntılı olarak inceleyeceğiz.
Neden Python ile Ağ Trafiği Analizi?
Python, ağ programlama ve veri analizi alanında oldukça popülerdir. Bunun başlıca nedenleri şunlardır:
- Okunabilirlik ve Sadeli: Python'ın temiz ve basit söz dizimi, karmaşık ağ işlemlerinin bile anlaşılır bir şekilde kodlanmasına olanak tanır.
- Zengin Kütüphane Desteği: Scapy, pyshark, dpkt, Twisted gibi birçok güçlü kütüphane, paket yakalama, manipülasyonu ve analizi için hazır çözümler sunar.
- Platform Bağımsızlığı: Python kodları, Windows, Linux, macOS gibi farklı işletim sistemlerinde sorunsuz bir şekilde çalışabilir.
- Otomasyon Yeteneği: Rutin ağ analizi görevlerini otomatikleştirmek veya özel test senaryoları oluşturmak için idealdir.
- Entegrasyon: Veritabanları, web arayüzleri ve diğer sistemlerle kolayca entegre olabilir.
Scapy: Ağ Paketleri ile Oynamanın Sanatı
Scapy, Python tabanlı, güçlü ve interaktif bir paket manipülasyon programıdır. Paket yakalama (capture), paket oluşturma (crafting), paket enjeksiyonu (injection) ve paket analizini (analysis) destekler. Güvenlik uzmanları, ağ yöneticileri ve araştırmacılar için paha biçilmez bir araçtır. Scapy ile, mevcut ağ protokollerini ayrıştırabilir, kendi özel protokollerinizi tanımlayabilir veya paketleri değiştirip ağa geri gönderebilirsiniz.
Kurulum:
Scapy'yi kurmak oldukça basittir. Genellikle `pip` aracı kullanılır:
Kod:
pip install scapy
Temel Paket Yakalama:
Scapy'nin en temel özelliklerinden biri ağ arayüzünden paket yakalamaktır. `sniff()` fonksiyonu bu amaçla kullanılır.
Kod:
from scapy.all import *
# İlk 5 paketi yakala
packets = sniff(count=5)
packets.summary()
# Belirli bir arayüzden yakala (örn: 'eth0' veya 'Wi-Fi')
# packets_eth0 = sniff(iface="eth0", count=10)
# Bir filtre ile yakala (örn: sadece HTTP trafiği veya belirli bir IP'den gelen)
# packets_http = sniff(filter="tcp port 80", count=10)
# packets_from_ip = sniff(filter="host 192.168.1.1", count=10)
Paket İncelemesi:
Yakalanan paketler bir liste objesi gibi davranır ve her paket ayrı ayrı incelenebilir.
Kod:
# Yakalanan ilk paketi incele
packet = packets[0]
packet.show()
# Paket katmanlarına erişim
# IP katmanı
if IP in packet:
print(f"Kaynak IP: {packet[IP].src}")
print(f"Hedef IP: {packet[IP].dst}")
# TCP katmanı
if TCP in packet:
print(f"Kaynak Port: {packet[TCP].sport}")
print(f"Hedef Port: {packet[TCP].dport}")
# Ham verilere erişim
# print(packet.raw_packet_bytes())
Paket Oluşturma (Crafting):
Scapy'nin en güçlü yönlerinden biri, özel paketler oluşturabilme yeteneğidir. Bu, penetrasyon testleri, ağ protokolü testi veya özel iletişim senaryoları için kullanılabilir.
Kod:
# Basit bir ICMP (ping) paketi oluşturma
ip_layer = IP(dst="www.google.com")
icmp_layer = ICMP()
ping_packet = ip_layer / icmp_layer
# Paketi gönderme ve yanıt bekleme
# sr1() tek bir yanıt bekler (send/receive 1)
# send() yanıt beklemez
# sr() çoklu yanıtlar için kullanılır
print("Ping paketi gönderiliyor...")
response = sr1(ping_packet, timeout=2, verbose=0)
if response:
print("Yanıt alındı:")
response.show()
else:
print("Yanıt alınamadı.")
# TCP SYN paketi oluşturma (port taraması için)
target_ip = "192.168.1.1" # Hedef IP adresini buraya girin
target_port = 80
syn_packet = IP(dst=target_ip) / TCP(dport=target_port, flags="S")
# Paketi gönderme
# send(syn_packet)
PCAP Dosyaları ile Çalışma:
Wireshark veya tcpdump gibi araçlarla yakalanan `.pcap` veya `.pcapng` dosyalarını Scapy ile okuyabilir ve analiz edebilirsiniz. Benzer şekilde, Scapy ile yakaladığınız veya oluşturduğunuz paketleri bu formatlarda kaydedebilirsiniz.
Kod:
# Bir pcap dosyasından paketleri okuma
# test.pcap dosyasının mevcut olduğundan emin olun
try:
pcap_packets = rdpcap("test.pcap")
print(f"test.pcap dosyasından {len(pcap_packets)} paket okundu.")
pcap_packets.summary()
except FileNotFoundError:
print("test.pcap dosyası bulunamadı. Lütfen bir tane oluşturun veya mevcut bir dosyayı kullanın.")
# Örnek olarak 5 paket yakalayıp kaydedelim
print("Örnek olarak 5 paket yakalanıp 'my_packets.pcap' olarak kaydediliyor...")
example_packets = sniff(count=5, timeout=10) # 10 saniye içinde 5 paket veya timeout
if example_packets:
wrpcap("my_packets.pcap", example_packets)
print("Paketler 'my_packets.pcap' dosyasına kaydedildi.")
pcap_packets = rdpcap("my_packets.pcap")
print(f"'my_packets.pcap' dosyasından {len(pcap_packets)} paket okundu.")
pcap_packets.summary()
else:
print("Hiç paket yakalanamadı, örnek dosya oluşturulamadı.")
# Yakalanan veya oluşturulan paketleri pcap dosyasına kaydetme
# wrpcap("my_capture.pcap", packets)

Yukarıdaki örnek görselde hipotetik bir ağ akışı şematize edilmiştir.
İleri Düzey Analiz ve Kullanım Senaryoları
Scapy, sadece temel paket yakalama ve oluşturmanın ötesinde, çok daha karmaşık analizler yapmanıza olanak tanır.
Protokol Ayrıştırma ve Katmanlara Erişim:
Scapy, paket içindeki her bir protokol katmanını otomatik olarak ayrıştırır. Bu, belirli bir protokole özgü alanlara kolayca erişmenizi sağlar.
Kod:
from scapy.all import *
# Örnek bir UDP paketi oluşturalım
# DNS sorgusu gibi düşünebiliriz
udp_packet = Ether()/IP(dst="8.8.8.8")/UDP(dport=53)/DNS(rd=1, qd=DNSQR(qname="google.com"))
print("UDP Paketi Detayları:")
udp_packet.show()
# Her katmanı manuel olarak inceleme
print("\nKatman Katman İnceleme:")
print(udp_packet.haslayer(Ether)) # True
print(udp_packet.haslayer(IP)) # True
print(udp_packet.haslayer(UDP)) # True
print(udp_packet.haslayer(DNS)) # True
print(f"Kaynak MAC: {udp_packet[Ether].src}")
print(f"Hedef IP: {udp_packet[IP].dst}")
print(f"Kaynak Port: {udp_packet[UDP].sport}")
print(f"DNS Sorgusu: {udp_packet[DNSQR].qname.decode()}") # DNSQR'daki sorgu adı
Saldırı Tespiti ve Güvenlik Analizi:
Python ve Scapy, ağ güvenliği alanında birçok uygulama bulur. Örneğin, ağdaki anormal trafik kalıplarını tespit etmek, belirli saldırı imzalarını (SYN flood, port taraması vb.) belirlemek veya IDS/IPS (Intrusion Detection/Prevention System) benzeri basit araçlar oluşturmak mümkündür.
"Ağ trafiği analizi, siber güvenlikte proaktif bir duruş sergilemenin temel taşıdır." - Siber Güvenlik Uzmanı
Kod:
# Basit bir SYN Flood tespit mekanizması (örnek amaçlı)
# Gerçek bir senaryoda çok daha kompleks olacaktır.
syn_count = {}
threshold = 50 # Bir saniye içinde 50 SYN paketi
def syn_monitor(packet):
if TCP in packet and packet[TCP].flags == 'S': # Sadece SYN bayrağı set edilmiş paketler
src_ip = packet[IP].src
syn_count[src_ip] = syn_count.get(src_ip, 0) + 1
if syn_count[src_ip] > threshold:
print(f"[UYARI] {src_ip} adresinden olası SYN Flood saldırısı tespit edildi!")
# Burada loglama, alert gönderme veya engelleme gibi aksiyonlar alınabilir.
# Arka planda SYN paketlerini dinle
# sniff(prn=syn_monitor, store=0, filter="tcp and tcp[tcpflags] & syn != 0")
# Bu komut sürekli dinler ve yakalanan her paketi syn_monitor fonksiyonuna gönderir.
# store=0 ile paketleri bellekte tutmaz, sadece fonksiyonu çalıştırır.
Ağ Performans İzleme:
Paket boyutlarını, gecikmeleri (latency), paket kayıplarını (packet loss) izleyerek ağ performansını ölçmek mümkündür. Örneğin, belirli bir uygulama trafiğinin ortalama gecikme süresini hesaplayabilir veya yüksek bant genişliği kullanan akışları belirleyebilirsiniz.
Özel Protokol Geliştirme ve Testi:
Scapy, henüz desteklenmeyen veya özel olarak geliştirilmiş bir protokolü ayrıştırmak veya oluşturmak için de kullanılabilir. Kendi katmanlarınızı tanımlayarak, mevcut ağ analiz araçlarının yapamayacağı şeyleri yapabilirsiniz.
Diğer Python Kütüphaneleri:
- pyshark: Wireshark'ın TShark motorunu kullanan bir Python kütüphanesidir. Scapy'den farklı olarak, pyshark paketleri yakalamak ve ayrıştırmak için TShark'ın gücünü kullanır, bu da daha zengin protokol ayrıştırma yetenekleri sunar ancak Scapy'nin sunduğu paket oluşturma ve gönderme esnekliğine sahip değildir.
Kod:import pyshark # Canlı arayüzden yakalama # capture = pyshark.LiveCapture(interface='eth0') # for packet in capture.sniff_continuously(packet_count=5): # print(f"Zaman: {packet.sniff_timestamp}, Kaynak: {packet.ip.src}, Hedef: {packet.ip.dst}") # Pcap dosyasından okuma # cap = pyshark.FileCapture('test.pcap') # for packet in cap: # print(packet)
- dpkt: Ağ paketlerini ayrıştırmak için kullanılan düşük seviyeli bir kütüphanedir. Genellikle Scapy kadar esnek olmasa da, hızlı ve verimli paket ayrıştırma için tercih edilebilir.
- Twisted: Geniş kapsamlı bir ağ programlama framework'üdür. Ağ servisleri ve istemcileri geliştirmek için kullanılabilir.
Sonuç
Python, ağ trafiği analizi için son derece güçlü ve esnek bir platform sunar. Özellikle Scapy kütüphanesi, ağ mühendislerine, güvenlik uzmanlarına ve araştırmacılara ağ paketleri üzerinde tam kontrol sağlama yeteneği verir. Paket yakalamadan paket oluşturmaya, güvenlik analizinden performans izlemeye kadar geniş bir yelpazede görevleri otomatikleştirebilir ve derinlemesine incelemeler yapabilirsiniz. Bu yetenekler, modern ağların karmaşıklığı karşısında vazgeçilmez bir araç haline gelmiştir. Unutulmamalıdır ki, ağ trafiği analizi yetenekleri etik ve yasal sınırlar içinde kullanılmalıdır.