Socket Programlama Temelleri: Kendi Basit Port Tarayıcını Yaz
Şimdiye kadar öğrendiğin her şeyi birleştirip GERÇEK, çalışan bir port tarama aracı yazıyoruz.
Bu, Temel Python serisinin en heyecan verici makalesi olabilir — çünkü artık şimdiye kadar öğrendiğin HER ŞEYİ (değişkenler, döngüler, koşullar, fonksiyonlar) birleştirip, GERÇEKTEN çalışan bir güvenlik aracı yazacağız: basit bir port tarayıcı.
Socket Nedir?
Bir socket, iki bilgisayar arasında ağ üzerinden iletişim kurmayı sağlayan bir programlama arayüzüdür — Temel Network serimizde öğrendiğimiz IP adresi ve port kavramlarını, kod seviyesinde KULLANMAMIZI sağlayan araçtır. Python'da socket modülü, bu işlemleri oldukça basit hâle getirir.
Tek Bir Portu Kontrol Etme
Önce, tek bir hedefte, tek bir portun açık olup olmadığını kontrol eden en temel kodu yazalım:
import socket
hedef_ip = "127.0.0.1" # kendi bilgisayarını temsil eden özel bir IP (localhost)
hedef_port = 80
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1) # 1 saniyeden fazla yanıt beklemeyi bırak
sonuc = sock.connect_ex((hedef_ip, hedef_port))
if sonuc == 0:
print(f"Port {hedef_port}: AÇIK")
else:
print(f"Port {hedef_port}: kapalı veya erişilemiyor")
sock.close()
Burada connect_ex() fonksiyonu, belirtilen IP ve port'a bağlanmayı DENER — eğer başarılı olursa (0 döner), bu portun AÇIK olduğu anlamına gelir; başarısız olursa (farklı bir hata kodu döner), port kapalı veya erişilemez demektir. Bu, Ağ Güvenliği kütüphanemizdeki "Port Tarama ve Nmap" makalesinde detaylıca anlattığımız TCP Connect taramasının (Nmap'in -sT seçeneği), en basitleştirilmiş kod hâlidir.
Birden Fazla Portu Tarama: Öğrendiklerimizi Birleştirme
Şimdi, bir önceki makalelerde öğrendiğimiz for döngüsünü ve listeleri kullanarak, TEK BİR portu değil, BİRDEN FAZLA portu sırayla kontrol eden bir script yazalım:
import socket
def port_tara(hedef_ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
sonuc = sock.connect_ex((hedef_ip, port))
sock.close()
return sonuc == 0 # True (açık) veya False (kapalı) döner
hedef_ip = "127.0.0.1"
taranacak_portlar = [21, 22, 80, 443, 3389]
print(f"{hedef_ip} taranıyor...\n")
for port in taranacak_portlar:
if port_tara(hedef_ip, port):
print(f"Port {port}: AÇIK")
else:
print(f"Port {port}: kapalı")
print("\nTarama tamamlandı.")
Bu script'i çalıştırdığında, GERÇEKTEN kendi bilgisayarındaki (veya izin verilen bir test ortamındaki) portları tek tek kontrol edip sonucu ekrana basar. Bu, önceki tüm makalelerde öğrendiklerimizin (fonksiyon tanımlama, döngü, koşul, ağ modülü kullanma) bir araya gelmiş hâlidir — artık teoriyi değil, PRATİKTE ÇALIŞAN bir aracı yazdın.
Yasal ve Etik Uyarı
Ağ Güvenliği kütüphanemizdeki Nmap makalesinde de belirttiğimiz gibi: bu script'i SADECE kendi bilgisayarında (127.0.0.1) veya yazılı izin aldığın sistemlerde çalıştır. Başkasına ait bir sisteme izinsiz port taraması yapmak, Türkiye'de dahil birçok ülkede yasal sonuçlar doğurabilir.
Bir Sonraki Adım
Bu script, gerçek bir Nmap'e kıyasla çok basit (Nmap'in SYN taraması gibi daha gizli teknikleri, servis tespiti gibi özellikleri yok) — ama temel mantık AYNI: bir hedefe bağlanmayı dene, sonucu yorumla. Bu, "büyük, karmaşık güvenlik araçlarının bile temelde basit fikirlerin üzerine inşa edildiğini" görmen için harika bir örnek.
Bu makale, socket programlama ve basit bir port tarayıcı yazmaya giriş niteliğinde, başlangıç seviyeli bir özetidir; SiberCrew ekibi tarafından hazırlanmış özgün içeriktir.