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.