Генератор случайных портов
Технические детали
Как работает генератор случайных портов
Что делает инструмент
Генератор случайных портов выбирает один или несколько номеров TCP/UDP-портов из запрошенного диапазона IANA, используя crypto.getRandomValues() и непредвзятый отбор с отклонением. По умолчанию он избегает как well-known портов, так и подобранного списка широко используемых портов для разработки (3000, 8080, 5432, 6379 и т. д.), чтобы сгенерированные номера сразу подходили для новых локальных сервисов.
Распространенные сценарии использования для разработчиков
Разработчики, поднимающие новые микросервисы, стеки docker-compose или эфемерные тестовые окружения, используют инструмент, чтобы выбирать порты без конфликтов, не задумываясь. SRE выделяют порты для новых внутренних сервисов без ручного просмотра таблиц IANA. Диапазон «ephemeral» идеально подходит для клиентских TCP тест-харнесов, которым нужны краткоживущие сокеты, соответствующие поведению ядра в продакшене.
Форматы данных, типы или варианты
Доступны три предопределённых диапазона: Well-known (1–1023), Registered / Unprivileged (1024–49151) и Dynamic / Ephemeral (49152–65535). Каждый сгенерированный номер помечается своей классификацией. Список avoid-common-ports охватывает HTTP/HTTPS, SSH, распространённые порты баз данных, популярные dev-серверы, очереди сообщений и стандартные сервисы кэширования.
Распространенные ошибки и крайние случаи
Случайное выделение порта не проверяет, свободен ли порт на вашей машине — для этого нужна попытка bind на уровне ОС. Список «avoid common ports» подобран вручную и не является исчерпывающим; некоторые отраслевые значения по умолчанию (Cassandra 9042, Elasticsearch 9300 и т. д.) отмечены, но пользовательские внутренние сервисы всё равно могут конфликтовать. Сгенерируйте новый набор, если первый выбор конфликтует с чем-то локальным.
Когда использовать этот инструмент, а когда — код
Используйте браузерный инструмент при настройке разового сервиса или написании примера. В автоматизации предпочтительнее просить ОС назначить порт (выполнить bind на порт 0 и прочитать выбранное значение) — это гарантирует, что порт действительно свободен, и исключает гонку между случайным выбором и bind.