Python Python'da Traceroute Uygulaması

Traceroute, bir ağdaki IP paketlerinin bir kaynaktan hedefe nasıl yönlendirildiğini görmek için kullanılan bir ağ teşhis aracıdır. Bir paket, bir hedefe ulaşmadan önce bir dizi "hop" üzerinden geçer ve her bir hop genellikle bir yönlendiricidir. Traceroute, bu yönlendiricilerin IP adreslerini ve her birine ulaşmak için geçen süreyi (gecikme) gösterir. Bu makalede, Python kullanarak basit bir traceroute uygulaması yazmayı öğreneceksiniz.

Traceroute

Traceroute, IP paketinin Time to Live (TTL) adlı bir alanını kullanır. Her paket, TTL değeri ile birlikte gönderilir. TTL, paketin geçebileceği maksimum hop sayısını belirler. Paket bir hop üzerinden geçtiğinde, TTL değeri bir azaltılır. Eğer TTL sıfıra ulaşırsa, paket atılır ve hop, kaynağa bir ICMP "Time Exceeded" mesajı gönderir. Traceroute bu mesajları kullanarak her bir hop'u keşfeder.

Gerekli Kütüphaneler

Python'da traceroute işlemi yapmak için scapy kütüphanesini kullanacağız. Scapy, ağ protokollerini analiz etmek, paket oluşturmak ve göndermek için güçlü bir Python kütüphanesidir.

scapy kütüphanesini yüklemek için aşağıdaki komutu kullanabilirsiniz
Bash:
pip install scapy

Traceroute Uygulaması

Adım 1: Gerekli Kütüphaneleri İçe Aktarma

Öncelikle, uygulamamız için gerekli kütüphaneleri içe aktaracağız.
Python:
from scapy.all import IP, ICMP, sr1, conf
import time
  • IP: Bu modül, IP paketleri oluşturmak için kullanılır.
  • ICMP: ICMP (Internet Control Message Protocol) mesajları oluşturmak için kullanılır.
  • sr1: Bu fonksiyon, tek bir paket gönderir ve bir yanıt bekler.
  • conf: Scapy'nin genel yapılandırma ayarlarını yapmamıza olanak tanır.
  • time: Bu modül, zaman hesaplamaları için kullanılır.

Adım 2: Traceroute Fonksiyonunu Yazma

"traceroute" fonksiyonu, hedef adrese kadar olan yolun her bir adımını keşfetmek için yazılacaktır.
Python:
def traceroute(destination, max_hops=30, timeout=2):
    # scapy'nin sessiz modda çalışmasını sağlamak
    conf.verb = 0
    print(f"Traceroute to {destination} with maximum {max_hops} hops:")

    for ttl in range(1, max_hops + 1):
        # IP paketi oluşturma, TTL'yi ayarlama
        packet = IP(dst=destination, ttl=ttl) / ICMP()
        
        start_time = time.time()
        reply = sr1(packet, timeout=timeout)
        end_time = time.time()
        
        if reply is None:
            print(f"{ttl}\t*\tRequest timed out.")
        else:
            elapsed_time = round((end_time - start_time) * 1000, 2)
            print(f"{ttl}\t{reply.src}\t{elapsed_time} ms")
            
            if reply.type == 0:  # ICMP Echo Reply
                print(f"Reached destination {destination} in {ttl} hops.")
                break
    else:
        print(f"Could not reach {destination} within {max_hops} hops.")

Fonksiyon Açıklaması

  • conf.verb = 0: Scapy'nin çıktısını sessize alır. Bu, gereksiz bilgi mesajlarını gizlemek için kullanılır.
  • for ttl in range(1, max_hops + 1): TTL değerini 1'den başlayarak arttırır ve maksimum hop sayısına kadar devam eder.
  • IP(dst=destination, ttl=ttl): Hedefe yönelik bir IP paketi oluşturur ve TTL değerini ayarlar.
  • ICMP(): ICMP Echo Request paketini oluşturur. Bu, ağ üzerinden yanıt beklenen bir mesajdır.
  • sr1(packet, timeout=timeout): Paketi gönderir ve belirtilen süre içinde bir yanıt bekler. Yanıt almazsa, None döner.
  • reply.type == 0: Yanıt tipi 0 ise (ICMP Echo Reply), hedefe başarıyla ulaşıldığı anlamına gelir.

Adım 3: Uygulamayı Çalıştırma

Artık fonksiyonumuzu yazdığımıza göre, kullanıcıdan bir hedef IP adresi veya domain girmesini isteyebiliriz ve traceroute fonksiyonunu çalıştırabiliriz.
Python:
if __name__ == "__main__":
    destination = input("Enter the destination IP or domain: ")
    traceroute(destination)

Çıktı

Uygulamayı çalıştırdığınızda, aşağıdaki gibi bir çıktı alırsınız
Kod:
Traceroute to 8.8.8.8 with maximum 30 hops:
1    192.168.1.1    1.23 ms
2    10.0.0.1    3.45 ms
3    192.0.2.1    15.67 ms
4    8.8.8.8    30.12 ms
Reached destination 8.8.8.8 in 4 hops.
Her bir satır, bir hop üzerinden geçişi gösterir. Bir hop'a ulaşmak için geçen süre milisaniye cinsindendir.

Sonuç

Bu makalede, Python ve scapy kütüphanesi kullanarak basit bir traceroute uygulaması yazmayı öğrendik. Traceroute, ağ üzerindeki sorunları teşhis etmek ve paketlerin bir kaynaktan hedefe nasıl ulaştığını anlamak için son derece faydalı bir araçtır. Python ile bu tür ağ araçlarını geliştirmek, ağ yönetimi ve güvenliği konularında derinlemesine bilgi sahibi olmanıza yardımcı olabilir.
 
Geri
Üst