Как выбрать статический номер порта для пользовательского приложения? - PullRequest
16 голосов
/ 01 сентября 2011

У нас есть специальное приложение, которое должно обслуживать запросы на свой номер порта. Нам действительно все равно, какой это номер, хотя мы будем придерживаться этого порта после того, как решим. Как выбрать номер, который реже всего конфликтует с другими приложениями или службами, работающими в системе пользователя?

Существуют ли какие-либо правила или стандарты, которым мы должны следовать?

Уточнение : как только мы выберем порт, нам нужно придерживаться его. Не могу использовать динамический. Мы создаем собственный SFTP-сервер, и нам нужно будет сообщить нашим клиентам, на каком порту он работает.

Ответы [ 4 ]

13 голосов
/ 01 сентября 2011

Для статического приложения рассмотрите возможность проверки /etc/services, чтобы найти порт, который не будет конфликтовать с чем-либо еще, что вы используете, и не используется в других местах.

$ tail /etc/services
nimspooler      48001/udp                       # Nimbus Spooler
nimhub          48002/tcp                       # Nimbus Hub
nimhub          48002/udp                       # Nimbus Hub
nimgtw          48003/tcp                       # Nimbus Gateway
nimgtw          48003/udp                       # Nimbus Gateway
com-bardac-dw   48556/tcp                       # com-bardac-dw
com-bardac-dw   48556/udp                       # com-bardac-dw
iqobject        48619/tcp                       # iqobject
iqobject        48619/udp                       # iqobject
8 голосов
/ 01 сентября 2011

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

Конечно, вы все еще можете избежать очень распространенных портов, таких как 8080 (альтернативный HTTP) или 3128 (прокси, такие как squid), 1666 (Perforce) и т. д. Вы можете проверить полный список известных портов здесь или взглянуть на /etc/services.

7 голосов
/ 01 сентября 2011

Если вам не важен номер порта и он не против того, чтобы он менялся при каждом запуске вашей программы, просто не привязывайте порт, пока вы его не прослушаете (или не привязывайте порт 0, если выхотите привязать конкретный IP-адрес).В обоих случаях вы советуете ОС выбрать свободный порт для вас.

После того, как вы начнете прослушивать, используйте getsockname, чтобы узнать, какой порт был выбран.Вы можете записать его в файл, отобразить на экране, попросить ребенка наследовать его через fork и т. Д.

0 голосов
/ 08 февраля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...