port_scanner.py en Python
Escanear un host en busca de puertos abiertos de una lista común.
"""Escanea un host buscando puertos TCP abiertos de una lista común."""
import socket
import sys
COMUNES = {22: "ssh", 80: "http", 443: "https", 5432: "postgres",
6379: "redis", 8080: "http-alt"}
def esta_abierto(host, puerto, timeout=0.5):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.settimeout(timeout)
return sock.connect_ex((host, puerto)) == 0
def principal():
host = sys.argv[1] if len(sys.argv) > 1 else "127.0.0.1"
print(f"escaneando {host}")
hallados = 0
for puerto, nombre in sorted(COMUNES.items()):
if esta_abierto(host, puerto):
print(f" {puerto:5d} abierto ({nombre})")
hallados += 1
print(f"{hallados} de {len(COMUNES)} puertos comunes abiertos")
if __name__ == "__main__":
principal()
Cómo funciona
connect_exreporta si un puerto acepta.- Un timeout corto agiliza los puertos cerrados.
- Los puertos abiertos se emparejan con nombres de servicio.
Palabras clave y builtins usados aquí
asdefelseforiflenprintreturnsortedwith
El intento, en números
- Líneas
- 27
- Caracteres a escribir
- 733
- Tokens
- 199
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 109 segundos.
Paso 1 de 3 en Bis; paso 39 de 41 en Herramientas de dominio.