← Back to list

Python ile Kendi Ağ Tarayıcınızı Yazın: Scapy ve ARP Rehberi

Python ve Scapy kütüphanesini kullanarak yerel ağdaki cihazları keşfedin, ARP protokolünün çalışma mantığını uygulamalı olarak öğrenin.

Çınar Genç · 2025-11-26 18:48 · 35 claps · 2.5 min read
#python #cybersecurity #networking #scapy #coding
Open on Medium ↗
Wiki topics: 💻 · Programming 🔒 · Cybersecurity

Python ile Kendi Ağ Tarayıcınızı Yazın: Scapy ve ARP Rehberi

Python ve Scapy kütüphanesini kullanarak yerel ağdaki cihazları keşfedin, ARP protokolünün çalışma mantığını uygulamalı olarak öğrenin.

Giriş

Siber güvenlik dünyasına adım attığınızda veya ağ yönetimiyle ilgilendiğinizde, ilk öğrenmeniz gereken şeylerden biri “Farkındalık”tır. Şu an ağımda kimler var? Hangi cihazlar bağlı? Bu soruların cevabını bulmak için hazır araçlar (Nmap, Netdiscover vb.) olsa da, kendi aracınızı yazmak ağ protokollerinin nasıl çalıştığını anlamanın en iyi yoludur.

Bu yazıda, Python’un güçlü kütüphanesi Scapy’yi kullanarak, yerel ağımızdaki cihazların IP ve MAC adreslerini tespit eden bir “Network Scanner” (Ağ Tarayıcısı) yazacağız.

Neden ARP Protokolünü Kullanıyoruz?

Kodlamaya geçmeden önce mantığı anlamalıyız. Bir ağdaki cihazlar birbirleriyle iletişim kurmak için IP adreslerini kullanırlar ancak veri paketi fiziksel olarak iletilirken MAC (Media Access Control) adresine ihtiyaç duyar.

İşte burada ARP (Address Resolution Protocol) devreye girer. Bizim yazacağımız programın çalışma mantığı şudur:

  1. Ağdaki tüm cihazlara “Bu IP adresi kimde?” diye soran bir paket gönder (Broadcast).
  2. İlgili IP’ye sahip cihaz, “O IP bende, MAC adresim de bu!” diye cevap verir.
  3. Gelen cevapları topla ve listele.

Gerekli Kütüphaneler

Projemizde iki temel kütüphane kullanacağız:

  • Scapy: Paket oluşturmak, göndermek ve ağ trafiğini analiz etmek için.
  • Argparse: Terminalden parametre alarak aracımızı daha profesyonel hale getirmek için.

Terminalden pip install scapy diyerek kurulumu yapabilirsiniz.

Adım Adım Kodlama

1. Kullanıcıdan Girdi Alma (Argparse)

Statik bir kod yazmak yerine, kullanıcının taramak istediği IP aralığını terminalden girmesini istiyoruz. Bunun için get_arguments fonksiyonunu oluşturuyoruz:

import scapy.all as scapy
import argparse

def get_arguments():
    parser = argparse.ArgumentParser(description="Network Scanner Tool")
    parser.add_argument("-t", "--target", dest="target", help="Taranacak IP Adresi veya Aralığı")
    options = parser.parse_args()

    if not options.target:
        parser.error("Lütfen bir IP adresi belirtin. Yardım için --help kullanın.")

    return options

Bu sayede programımızı python scanner.py -t 192.168.1.1/24 şeklinde çalıştırabileceğiz.

2. Paketi Oluşturma ve Gönderme (Scapy)

İşin en heyecanlı kısmı burası. Scapy’nin katmanlı yapısını kullanarak bir ARP isteği oluşturacağız.

def scan(ip):
    # 1. ARP İsteği: "Bu IP kimde?" sorusu
    arp_request = scapy.ARP(pdst=ip)

    # 2. Broadcast: Paketin ağdaki herkese gitmesi için
    broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")

    # 3. Paketleri Birleştirme (Scapy'de '/' operatörü kullanılır)
    arp_request_broadcast = broadcast / arp_request

    # 4. Gönderme ve Cevap Alma
    # srp (send receive packets) fonksiyonu 2. katmanda (Ethernet) çalışır.
    answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0]

    clients_list = []

    # Gelen cevapları anlamlı bir listeye dönüştürme
    for element in answered_list:
        client_dict = {"ip": element[1].psrc, "mac": element[1].hwsrc}
        clients_list.append(client_dict)

    return clients_list

Burada scapy.srp fonksiyonu, oluşturduğumuz paketi gönderir ve gelen cevapları dinler. verbose=False parametresi, ekrana gereksiz detayların basılmasını engeller.

3. Sonuçları Görselleştirme

Elde ettiğimiz verileri (IP ve MAC adresleri) okunabilir bir tablo halinde sunmak için print_result fonksiyonunu yazıyoruz:

def print_result(results_list):
    print("-" * 50)
    print(f"{'IP Address':<20} {'MAC Address':<20}")
    print("-" * 50)

    for client in results_list:
        print(f"{client['ip']:<20} {client['mac']:<20}")

Sonuç ve Çalıştırma

Kodların tam hali : https://github.com/Cinargenc/my_net_scanner

Tüm parçaları birleştirdiğimizde, kendi ağ tarayıcımız hazır! Script’i çalıştırmak için terminali açın ve root yetkileriyle (Scapy ağ kartına erişmek için root yetkisi ister) şu komutu girin(Öncesinde terminalde ip a şeklinde taratarak bilmiyorsanız ip adresinizi öğrenebilirsiniz):

sudo python3 network_scanner.py -t 192.168.1.1/24

Kali Linux makinemizde çalıştırdığımızda alacağımız çıktı:

Gördüğünüz gibi, sadece birkaç satır Python kodu ile ağımızdaki cihazları haritalandıran güçlü bir araç yazdık. Bu projeyi geliştirmek için üretici firma bilgilerini de (OUI lookup) ekleyebilir veya sonuçları bir dosyaya kaydedebilirsiniz.

İyi kodlamalar!


메타데이터
post_id
c4b4746c76ef
slug
python-ile-kendi-ağ-tarayıcınızı-yazın-scapy-ve-arp-rehberi-c4b4746c76ef
url
https://medium.com/@cinargencc/python-ile-kendi-a%C4%9F-taray%C4%B1c%C4%B1n%C4%B1z%C4%B1-yaz%C4%B1n-scapy-ve-arp-rehberi-c4b4746c76ef
canonical_url
https://medium.com/@cinargencc/python-ile-kendi-a%C4%9F-taray%C4%B1c%C4%B1n%C4%B1z%C4%B1-yaz%C4%B1n-scapy-ve-arp-rehberi-c4b4746c76ef
author_url
https://medium.com/@cinargencc
status
ok
fetched_at
2026-07-14 21:01:18