Genera numeros de puerto TCP o UDP aleatorios en cualquier rango, evitando automaticamente los puertos de servicios conocidos y habitualmente ocupados para que tus servicios locales no colisionen.
Un numero de puerto que probablemente nadie mas quiera en tu maquina. Elige cuantos puertos necesitas y el rango del que extraerlos. Los puertos de servicios conocidos se omiten por defecto, asi que los numeros obtenidos dificilmente chocaran con algo que ya se este ejecutando.
–
Elegir un numero de puerto que no colisione
Como se divide el espacio de puertos
Un puerto TCP o UDP es un numero de 16 bits, asi que el rango utilizable va de 0 a 65535. IANA divide ese espacio en tres partes. Los puertos de 0 a 1023 son los puertos del sistema o bien conocidos, reservados para servicios estandar como HTTP en el 80 y SSH en el 22; en sistemas tipo Unix, enlazar uno de ellos suele requerir root o una capacidad explicita. Los puertos de 1024 a 49151 son puertos registrados, asignados bajo peticion a aplicaciones concretas: PostgreSQL en el 5432 y MySQL en el 3306 viven aqui. Los puertos de 49152 a 65535 forman el rango dinamico o efimero, reservado para asignaciones temporales del lado del cliente.
Para un servicio de desarrollo local, el punto ideal es el rango registrado por encima de 1024, evitando tanto el bloque privilegiado como el efimero. Por eso este generador usa 1024 como limite inferior por defecto. Mantenerse por debajo de 49152 importa mas de lo que parece: el sistema operativo toma numeros del rango efimero cada vez que un programa abre una conexion saliente, de modo que un servicio aparcado ahi puede encontrar su puerto ya ocupado tras un reinicio.
Por que ayuda omitir los puertos conocidos
La aleatoriedad por si sola no evita las colisiones. Un sorteo aleatorio podria caer facilmente en 3306, 5432, 6379 u 8080, y en una maquina de desarrollo en uso esos son precisamente los numeros con mas probabilidad de estar ya ocupados. La lista de exclusion utilizada aqui cubre los servicios Unix clasicos, las bases de datos y los brokers de mensajes habituales, y los puertos que eligen por defecto los frameworks populares, como el 3000 para herramientas de Node y el 8000 o el 8080 para servidores HTTP locales.
Omitirlos no cuesta practicamente nada - el conjunto sigue teniendo decenas de miles de candidatos - y elimina la causa mas frecuente del error "el puerto ya esta en uso". Si quieres deliberadamente uno de esos numeros, desactiva la opcion y el rango completo vuelve a estar disponible.
Ten presente que esto es una ayuda probabilistica, no una reserva. La herramienta no puede inspeccionar tu maquina, asi que no sabe si algo esta escuchando. Para confirmar que un puerto esta realmente libre, comprueba localmente con lsof -i :PUERTO en macOS o Linux, ss -ltnp en Linux moderno, o netstat -ano | findstr :PUERTO en Windows.
Puertos en contenedores y CI
Los entornos de contenedores y de CI cambian el calculo. Dentro de un contenedor el espacio de puertos suele ser privado, de modo que dos contenedores pueden escuchar ambos en el 8080 sin conflicto; el riesgo de colision se traslada al lado del anfitrion, donde los puertos publicados comparten un unico espacio de nombres. Elegir un puerto de anfitrion aleatorio y mapearlo a un puerto fijo del contenedor es una forma habitual de ejecutar varias copias del mismo servicio en paralelo.
Muchos sistemas de CI y herramientas de orquestacion lo resuelven de otra manera, pidiendo al nucleo un puerto libre: enlaza al puerto 0 y el sistema operativo asigna uno sin usar y te dice cual eligio. Eso es libre de condiciones de carrera y siempre correcto, asi que prefierelo cuando tu programa pueda recibir su puerto en tiempo de ejecucion. Un numero generado como los de aqui es la herramienta adecuada cuando necesitas un valor estable que escribir en un archivo de configuracion, en un mapeo de docker-compose o en un documento de equipo antes de que nada este funcionando.
Preguntas frecuentes
Por que el rango empieza en 1024 por defecto?
Los puertos por debajo de 1024 son privilegiados en sistemas tipo Unix y normalmente requieren root para enlazarse. Empezar en 1024 mantiene los resultados utilizables por una cuenta de usuario normal.
Debo evitar los puertos por encima de 49152?
Normalmente si para un servicio de larga duracion. Ese rango es de donde el sistema operativo saca los puertos efimeros de cliente, asi que un servicio aparcado ahi puede encontrar su numero ya reclamado tras un reinicio.
Comprueba esto si el puerto esta realmente libre?
No. La pagina se ejecuta enteramente en tu navegador y no puede inspeccionar tu sistema. Verificalo con `lsof -i :PUERTO`, `ss -ltnp` o `netstat -ano | findstr :PUERTO` antes de fijar un numero.
Que puertos excluye la opcion de omitir?
Los servicios Unix clasicos, bases de datos y brokers habituales como MySQL, PostgreSQL, Redis, RabbitMQ, MongoDB y Elasticsearch, y los valores por defecto de frameworks populares como 3000, 8000, 8080 y 8443.
Es la aleatoriedad criptograficamente segura?
Usa la Web Crypto API cuando el navegador la ofrece, con muestreo por rechazo para que el sorteo siga siendo uniforme, y solo recurre a Math.random cuando Crypto no esta disponible.
Cual es la diferencia entre un puerto TCP y uno UDP?
Son espacios separados de 65536 entradas cada uno, asi que TCP 8080 y UDP 8080 no tienen relacion y pueden usarlos programas distintos a la vez. Los numeros que genera esta herramienta sirven para ambos.