Python Scapy Ağ Güvenliği

Scapy Ağ
Tarayıcı

Scapy kütüphanesiyle geliştirilmiş özel ağ tarama aracı. ARP taraması ile yerel ağdaki cihazları keşfeder, SYN taraması ile açık portları tespit eder. Detaylı raporlama ve özelleştirilebilir tarama profilleri sunar.

Proje Amacı

Ağ yöneticileri ve güvenlik araştırmacıları için Python'un Scapy kütüphanesi üzerine kurulmuş, esnek ve güçlü bir ağ tarama aracı. Nmap gibi ticari araçlara alternatif olarak tasarlanmış olup, tamamen özelleştirilebilir tarama senaryoları sunar.

Ham paket oluşturma ve gönderme yeteneği sayesinde, standart araçların sunamadığı esneklikte ağ keşfi ve güvenlik taraması yapabilir. Eğitim amaçlı olarak ağ protokollerinin çalışma mantığını anlamak için de idealdir.

Tarama Modları

ARP Keşfi

Yerel ağdaki tüm aktif cihazları IP ve MAC adresleriyle birlikte keşfeder. Broadcast ARP istekleriyle hızlı tarama.

SYN Port Tarama

TCP SYN paketleri göndererek açık portları tespit eder. Half-open tarama ile gizli ve hızlı tarama.

Servis Tespiti

Açık portlardaki çalışan servisleri ve versiyonlarını banner grabbing ile tespit eder.

Ağ Haritalama

Keşfedilen cihazları, açık portları ve servisleri görsel bir ağ haritası olarak sunar.

Özellikler

  • ARP broadcast ile yerel ağ cihaz keşfi
  • TCP SYN (half-open) port taraması
  • UDP port taraması
  • ICMP ping sweep
  • Özelleştirilebilir port aralıkları
  • Paralel tarama ile hız optimizasyonu
  • JSON, CSV ve HTML rapor çıktısı
  • Komut satırı arayüzü (CLI)

Kod Örneği

scanner.py
from scapy.all import *
import concurrent.futures

class NetworkScanner:
    def arp_scan(self, network):
        """Yerel ağdaki aktif cihazları keşfet"""
        arp = ARP(pdst=network)
        ether = Ether(dst="ff:ff:ff:ff:ff:ff")
        result = srp(ether/arp, timeout=3, verbose=0)[0]

        devices = []
        for sent, received in result:
            devices.append({
                'ip': received.psrc,
                'mac': received.hwsrc
            })
        return devices

    def syn_scan(self, target, ports):
        """SYN taraması ile açık portları bul"""
        open_ports = []

        def scan_port(port):
            pkt = IP(dst=target)/TCP(dport=port, flags="S")
            resp = sr1(pkt, timeout=1, verbose=0)
            if resp and resp[TCP].flags == 0x12:
                return port
            return None

        with concurrent.futures.ThreadPoolExecutor(
            max_workers=50
        ) as executor:
            results = executor.map(scan_port, ports)
            open_ports = [p for p in results if p]

        return open_ports

Bunlara da
göz atın