Я хотел бы зарезервировать TCP-порт, который позже будет связан службой, чтобы Windows не использовала случайно один и тот же номер при назначении случайных номеров портов. Я знаю, что это возможно через реестр и перезагрузку, но я хотел бы избежать такого жесткого решения.
Как процесс может зарезервировать порт без его фактической привязки/прослушивания, а затем безопасно (т. е. избегая условий гонки) передать его другому процессу по запросу? Номер порта не нужно определять заранее. Это нормально, когда первый процесс получает случайный номер порта и передает его запрашивающему процессу.
EDIT: Мне кажется, что мой вопрос несколько плохо сформулирован. Чего я действительно хочу, так это отделить выделение динамического номера порта от операции привязки к нулевому порту. Это означает не только предотвращение случайного случайного выделения этого номера порта, но и предотвращение привязки любого другого процесса к тому же адресу/порту в промежутке времени.
Или, другими словами, я хочу, чтобы один процесс начал операцию привязки к нулевому порту — немедленно узнав номер порта, который будет использоваться, — и позволил назначенному второму процессу завершить операцию привязки когда-нибудь в будущем. На данный момент ближайший обходной путь, который я могу придумать, заключается в том, чтобы первый процесс немедленно привязывался к адресу / 0 и оставался привязанным до тех пор, пока второй процесс не запросит его, после чего он отменяет привязку и сообщает другому процессу номер порта, который он полученный, который затем явно привязывается к адресу/порту. У этого есть две проблемы: 1) я бы предпочел вообще не связываться, пока не появится второй процесс; 2) есть небольшой промежуток времени, в течение которого третья сторона может случайно (или умышленно) узурпировать порт.
Как Проверить Открытые Порты Windows и кто их секретно использует
проверка данных
Вам может быть любопытно, почему я хочу сделать что-то настолько странное. Я играл с ZeroMQ, и одним из основных ограничений является отсутствие ipc:// транспорт в Windows. Мне пришло в голову, что процесс сопоставления портов (похожий на средство сопоставления конечных точек RPC или epmd в Erlang) будет просто билетом для реализации обходного пути с использованием tcp:// транспорт с динамическим распределением портов. Однако клиентам и серверам ZeroMQ разрешено подключаться не по порядку (т. е. подключение клиента до того, как сервер привяжется, не является ошибкой), поэтому я пытаюсь выяснить, как подключающийся клиент может обнаружить — с очень высокая степень достоверности — порт, который будет использоваться для связи, до того, как сервер фактически привяжется к этому порту.
задан 09 марта ’11, 22:03
Marcelo Cantos
Обратите внимание, что Windows поддерживает что-то примерно эквивалентное сокетам Unix, это называется «Именованные каналы» (доступны как потоковые режимы, так и режимы, подобные сообщениям/датаграммам). Так что лучшим решением, вероятно, будет реализация «ipc:» на Win32. — Ben Voigt
Порты и перенаправлениеоткрытие портов. Инструкция и объяснения на пальцах!
5 ответы
- На сервере 2008/2008 R2 установите этот Исправление Microsoft. Это не требуется в Server 2012 или более поздней версии.
- Остановите все процессы, использующие зарезервированные порты. Если процесс использует порт, включенный в диапазон зарезервированных портов, NETSH вернет следующую ошибку, и резервирование завершится ошибкой:
Процесс не может получить доступ к файлу, поскольку он используется другим процессом.
Ноты:
- По умолчанию резервирование портов сохраняется после перезагрузки.
- Порты могут быть зарезервированы либо для версии 4, либо для версии 6 протокола, но не для обеих (т. е. вы не можете зарезервировать порт 60000 как для TCPv4, так и для TCPv6).
Читать https://support.microsoft.com/en-us/kb/929851 для получения дополнительной информации, в том числе о том, как просмотреть или удалить существующие резервирования портов.
ответ дан 10 дек ’16, 14:12
. Netsh команда может помочь вам. Вы можете изменить динамический диапазон портов, используемый Windows.
Это похоже на изменение реестра, которое вы указали, но оно вступает в силу немедленно.
видеть: http://support.microsoft.com/kb/929851 для получения подробной информации о команде netsh.
ответ дан 10 мар ’11, в 01:03
+1 за хорошее предложение. Это заставило меня понять, что даже не нужно менять настройки, просто запросите динамический диапазон портов и выберите номера портов, выходящие за пределы диапазона. Однако я переосмыслил (и отредактировал) свой вопрос, чтобы более точно отразить то, что мне нужно, чему на самом деле не помогает ни знание, ни манипулирование диапазоном динамических портов. — Марсело Кантос
Изменить: это относится только к версиям до Windows Server 2008 (База знаний службы поддержки Майкрософт)
Вы можете отредактировать параметр реестра «ReservedPorts» в
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services Tcpip Parameters
Чтобы зарезервировать диапазон портов, используйте формат «4000-4010» или «xxxx-yyyy», однако, чтобы зарезервировать один порт, вы должны использовать формат «4000-4000» или «xxxx-xxxx».
ответ дан 30 мая ’17, 23:05
Источник: stackovergo.com
unixforum.org
Какие порты можно использовать для своей программы?
Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.
Модератор: SLEDopit
6 сообщений • Страница 1 из 1
cutecode22 Сообщения: 31
Какие порты можно использовать для своей программы?
Сообщение cutecode22 » 26.09.2018 22:54
Написал свой SOAP сервер, который слушает порт 2102.
Интересно, есть ли как Windows какой либо условный диапазон портов,
который самописные программы могут использовать для себя, чтоб не мешать работе ОС?
про netstat я уже знаю, интересует именно диапазон портов для себя.
Спасибо сказали:
Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:
Re: Какие порты можно использовать для своей программы?
Сообщение Hephaestus » 27.09.2018 08:20
26.09.2018 22:54
Интересно, есть ли как Windows какой либо условный диапазон портов
Windows тут ни при чём.
Портов всего 65536, от 0 до 1024 считаются привилегированными, зарезервированными.
Всё, что выше — свободными для использования. В любой ОС.
Более того, на привилегированных портах в разных ОС висят одни и те же сервисы.
Эти соглашения касаются обмена данными через Сеть. От ОС не зависят.
Поскольку в Сети могут общаться между собой разные ОС.
Пускай скрипят мои конечности.
Я — повелитель бесконечности.
Мой блог
Спасибо сказали:
Bizdelnick Модератор Сообщения: 20365 Статус: nulla salus bello ОС: Debian GNU/Linux
Re: Какие порты можно использовать для своей программы?
Сообщение Bizdelnick » 27.09.2018 09:53
27.09.2018 08:20
на привилегированных портах в разных ОС висят одни и те же сервисы.
И на непривилегированных тоже. Список известных сервисов можно посмотреть в /etc/services.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще |
в течение (часа) новичок нюанс по умолчанию |
приемлемо проблема пробовать трафик |
Источник: unixforum.org
Как зарезервировать порт, чтобы предупредить возникновение ситуации, когда данный порт заняло другое ПО?
Вопрос: Как зарезервировать порт, чтобы предупредить возникновение ситуации, когда данный порт заняло другое ПО?
Ответ: Если вы используете порт с номером больше чем 1024, любая программа, которая запросила любой порт, может получить именно его. Чтобы таких случайностей не происходило, порт можно зарезервировать. Для этого достаточно добавить номер порта в формате диапазона портов в специальный ключ в registry:
Значение записывается в формате «номер порта- номер порта», например, «1801-1801» (без кавычек) зарезервирует порт 1801, а «1675-1679» зарезервирует порты 1675, 1676, 1677, 1678 и 1679.
Источник: www.inteltelecom.ru