Как выбрать порт TCP / IP по умолчанию для новой службы?


110

Как следует выбрать порт по умолчанию при разработке приложения, которое будет прослушивать порт TCP / IP? Предположим, что это приложение будет установлено на многих компьютерах и что желательно избегать конфликтов портов.


1
На этот вопрос лучше ответить здесь: stackoverflow.com/questions/10476987/…
matt2000

Ответы:


49

Зайдите сюда и выберите порт с описаниемUnassigned


11
Вы предлагаете выбрать порт под 100?
mpen

3
Какой выбрать?
Оуэн

1
Если все разработчики будут следовать этой логике, это будет означать, что все новые сервисы собираются вокруг нескольких неназначенных портов. Какова вероятность того, что служба работает на назначенном порте по сравнению с неназначенным портом. (Извините, если я не раскрываю коммерческую тайну :)
hultqvist

1
Если вы ищете порт для использования во внутренней сети, рассмотрите этот ответ на аналогичный вопрос: stackoverflow.com/questions/218839/…
adrianwadey

32

Первый шаг: посмотрите список IANA :

Там вы увидите в конце списка

«Динамические и / или частные порты - это порты с 49152 по 65535»

так что это будет ваш лучший выбор, но как только вы выберете одно, вы всегда сможете найти его в Google, чтобы узнать, есть ли достаточно популярное приложение, которое уже "заявило" на него


8
Но разве использование динамического порта не оставит меня открытым для периодических (хотя и редких) конфликтов портов? Возможно, безопаснее использовать порт в зарегистрированном диапазоне, который не назначен или назначен неясному приложению.
Кевин Вонг,

4
я думаю, если вы явно не зарегистрируете свой выбор порта в IANA, у вас будут те же шансы конфликта, используя «UNASSIGNED». На самом деле, поскольку в нижнем
ценовом сегменте

2
Всегда начинайте с неназначенного диапазона, с возможностью настраиваемого порта пользователем / администратором для разрешения возможных конфликтов. ТОЛЬКО если ваше приложение широко используется (подумайте о BitTorrent или другом крупном использовании), вам действительно следует рассматривать возможность подачи заявки на назначенный порт. В противном случае оставайтесь за пределами назначенного диапазона. Если это для чего-то строго внутреннего / личного, просто документируйте порты, используемые различными службами, и все будет в порядке, если люди смогут найти их где-нибудь в Интернете. Подумайте о частном / динамическом диапазоне, похожем на немаршрутизируемые IP-адреса - они идеально подходят для небольшого / частного использования.
Джеффлунт

3
Просто не делайте ошибки, предполагая, что вашему приложению нужен порт, назначенный IANA, потому что вы думаете, что ваше приложение резко возрастет в использовании раньше, чем это произойдет на самом деле. :)
jefflunt

7
Что касается динамического диапазона, я думаю, что "конфликтный" вопрос мог заключаться в следующем: если ОС использует этот диапазон для эфемерных портов (как и должно), возникнет ли конфликт с выбранным вами портом, если ОС случайным образом решит использовать этот порт, например, для исходящего соединения. (Насколько я понимаю, временные порты предназначены для случайного использования этого диапазона.) См. Другой вопрос, в котором более подробно изложена проблема.
Гаррет Уилсон

7

Если под широко используемым вы имеете в виду, что хотите защитить его от других людей, использующих его в будущем, вы можете подать заявку на то, чтобы он был помечен как зарезервированный для вашего приложения IANA здесь


5

Самый полный список официальных номеров портов IANA и неофициальных номеров портов, которые мне известны, - это nmap-services .


2

Вероятно, вы захотите избежать использования каких-либо портов из этого списка (Википедия).

Я бы просто выбрал один, и как только приложение будет использовано массами, номер порта будет распознан и включен в такие списки.


2

Как упоминают другие, проверьте IANA.

Затем проверьте свои локальные системы / etc / services, чтобы узнать, не используются ли уже какие-либо настраиваемые порты.

И, пожалуйста, не кодируйте это жестко. Убедитесь, что его можно каким-то образом настроить - хотя бы по той причине, что вы хотите, чтобы несколько разработчиков одновременно использовали свои локализованные сборки.


1

Обычно достаточно выбрать неназначенный продукт из списка IANA, но если вы говорите о коммерчески выпущенном продукте, вам действительно следует подать заявку в IANA, чтобы он был назначен вам. Обратите внимание, что это простой, но медленный процесс; в последний раз, когда я подавал заявку на получение одной, это длилось год.


1

Если это для приложения, которое, как вы ожидаете, будет широко использоваться, зарегистрируйте номер здесь, чтобы никто другой не использовал его.

В противном случае просто случайным образом выберите неиспользованный.

Проблема с использованием одного в динамическом диапазоне состоит в том, что он может быть недоступен, потому что он может использоваться для динамического номера порта.


0

Используйте список iana. Загрузите файл csv с:

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv

и используйте этот сценарий оболочки для поиска незарегистрированных портов:

for port in {N..M}; do if ! grep -q $port service-names-port-numbers.csv; then echo $port;fi; done;

и поставьте 2 числа вместо N и M.


-1

Ну, вы можете ссылаться на некоторые часто используемые номера портов здесь и постарайтесь не использовать чужой.

Если под «открытым для широкой публики» вы имеете в виду, что вы открываете порты в своих собственных системах, я бы побеседовал с вашими системными администраторами о том, с какими портами они могут это сделать.



-1

Выберите порт по умолчанию, который не мешает работе наиболее распространенных демонов и серверов. Также убедитесь, что номер порта не указан как вектор атаки для некоторых вирусов - некоторые компании имеют строгие правила, согласно которым они блокируют такие порты, несмотря ни на что. И последнее, но не менее важное: убедитесь, что номер порта можно настроить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.