← Ana Sayfa

Python ile Asenkron Port Tarayıcı Yazmak

17 Ekim 2026

Thread tabanlı tarayıcılar, GIL yüzünden birkaç yüz soketin üzerine çıkınca tıkanır. asyncio bu sorunu tamamen ortadan kaldırır. Aşağıda bloklamayan bir TCP port tarayıcı var:

import asyncio

async def scan_port(host: str, port: int, timeout: float = 2.5) -> tuple[int, bool]:
    try:
        fut = asyncio.open_connection(host, port)
        reader, writer = await asyncio.wait_for(fut, timeout=timeout)
        writer.close()
        await writer.wait_closed()
        return port, True
    except (ConnectionRefusedError, asyncio.TimeoutError, OSError):
        return port, False

async def scan_host(host: str, ports: range) -> dict[int, bool]:
    tasks = [scan_port(host, p) for p in ports]
    results = await asyncio.gather(*tasks)
    return {port: is_open for port, is_open in results if is_open}

if __name__ == "__main__":
    open_ports = asyncio.run(scan_host("127.0.0.1", range(1, 1025)))
    print(open_ports)

1024 portun tamamı tek tek değil, aynı anda taranır.