Gelişmiş Python Port Tarayıcı Scripti

Bu makalede Python kullanarak gelişmiş bir port tarayıcı scripti yazacağız. Bu script, kullanıcıdan bir IP adresi veya domain ve port aralığı girişi alacak, belirtilen portları tarayarak hangilerinin açık olduğunu listeleyecektir. Ayrıca, tarama sürecini optimize etmek için birden fazla ipucu sunacağız.
Gereksinimler ve Hazırlıklar
Bu script için şu kütüphaneleri kullanacağız:
socket
: TCP/UDP soketleri oluşturmak için kullanılır.argparse
: Kullanıcıdan komut satırı argümanları almak için kullanılır.threading
: Performansı arttırmak için birden fazla portun aynı anda taranması.queue
: Tarama işleri için bir iş kuyruğu oluşturmak.
Bu kütüphaneleri aşağıdaki komutla yükleyebilirsiniz:
pip install --upgrade pip
Projenin Yapısı
Adımlar:
- Kullanıcıdan hedef IP veya domain ve port aralığı al.
- Her bir port için TCP soket oluştur ve hedefe bağlan.
- Bağlantı başarılıysa portun açık olduğunu kaydet.
- Sonuçları ekrana veya bir dosyaya yaz.
Kodlama Aşamaları
Adım 1: Kullanıcıdan Girdi Alma
Kullanıcıdan hedef IP veya domain ve port aralığı almak için argparse
kütüphanesini kullanacağız.
import argparse
def get_user_input():
parser = argparse.ArgumentParser(description="Gelişmiş Python Port Tarayıcı")
parser.add_argument("-t", "--target", type=str, required=True, help="Hedef IP adresi veya domain")
parser.add_argument("-p", "--ports", type=str, required=True, help="Port aralığı (min-max)")
args = parser.parse_args()
target = args.target
try:
port_range = list(map(int, args.ports.split("-")))
if len(port_range) != 2 or port_range[0] > port_range[1]:
raise ValueError
except ValueError:
raise argparse.ArgumentTypeError("Port aralığı hatalı. Örneğin: 20-80")
return target, port_range
Açıklama:
- Kullanıcıdan IP ve port aralığı girdisi alınır.
-t
ile hedef IP/domain,-p
ile port aralığı belirtilir.- Port aralığı doğrulanır ve bir listeye dönüştürülür.
Adım 2: TCP Bağlantı Testi
Hedef portları taramak için bir TCP soketi oluşturalım.
import socket
def scan_port(target, port):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(1) # 1 saniye zaman aşımı
result = s.connect_ex((target, port)) # 0 dönerse bağlantı başarılı
if result == 0:
print(f"[+] Port {port} AÇIK")
else:
print(f"[-] Port {port} KAPALI")
except Exception as e:
print(f"[!] Port {port} taranırken hata: {e}")
Açıklama:
socket.AF_INET
IPv4 kullanımını belirtir.socket.SOCK_STREAM
bir TCP soketi oluşturur.connect_ex
metoduyla hedefe bağlanılır;0
dönerse başarılıdır.
Adım 3: Port Tarama ve Multithreading
Performansı arttırmak için her portu ayrı bir iş parçacığında tarayacağız.
import threading
from queue import Queue
port_queue = Queue()
def worker(target):
while not port_queue.empty():
port = port_queue.get()
scan_port(target, port)
port_queue.task_done()
def main():
target, port_range = get_user_input()
for port in range(port_range[0], port_range[1] + 1):
port_queue.put(port)
threads = []
for _ in range(10): # Aynı anda 10 iş parçacığı
t = threading.Thread(target=worker, args=(target,))
threads.append(t)
t.start()
for t in threads:
t.join()
print("[+] Tüm portlar tarandı.")
if __name__ == "__main__":
main()
Açıklama:
Queue
taranacak portları kuyruğa ekler.worker
fonksiyonu her bir iş parçacığına atanır ve portları tarar.- Aynı anda 10 iş parçacığı başlatılır.
Sonuçları Kayıt Etme
Sonuçları bir dosyaya kayıt etmek için aşağıdaki kodu ekleyebilirsiniz:
def save_results(results):
with open("scan_results.txt", "w") as f:
for line in results:
f.write(line + "\n")
# scan_port fonksiyonunda açık portları kaydet:
open_ports = []
if result == 0:
open_ports.append(f"Port {port} AÇIK")
save_results(open_ports)
Bu makalede basit bir port tarayıcıdan, performansı optimize eden ve kullanıcı dostu bir arayüz sağlayan gelişmiş bir Python scripti oluşturduk. Bu scripte isteğe göre farklı özellikler eklenebilir.