Я разрабатываю сервер на C, который привязывается к случайному порту
Боюсь, что выбранный случайный порт может конфликтовать с правилами iptables. Я имею в виду, что выбранный порт может уже существовать в iptables как порт для записи.
Как я могу проверить, не существует ли выбранный порт в правилах iptables с помощью C?
Если ваш сервер использует стандартный протокол, которому уже назначен официальный номер порта, то вам следует использовать официальный номер порта.
Если сервер использует нестандартный протокол без официального номера порта, вы должны использовать номер порта из диапазона 49152-65535, который обозначен: динамические и / или частные порты.
IANA не указала, какие из номеров использовать для динамических назначений, а какие - для локально определенных услуг. Однако ваша ОС может. В случае Linux любой номер порта, динамически назначаемый внешним клиентам, будет взят из диапазона, указанного в /proc/sys/net/ipv4/ip_local_port_range
По умолчанию это диапазон 32768 61000
, поэтому вам нужно избегать всего в этом диапазоне или ниже. Использование номеров портов выше 61000 должно быть безопасным.
Обычно вам нужен статический номер порта в вашей конфигурации, чтобы любой, кому нужно связаться с ним извне, знал, с каким номером порта связаться. Но вы можете выбрать случайное число из диапазона и поместить его в свой файл конфигурации, чтобы снизить вероятность его обнаружения при сканировании портов или привести к конфликту, когда вам нужно работать с другой службой, которая выбрала номер порта из тот же диапазон.
Обычно я использую эту команду для выбора номера порта для любой локально определенной службы:
echo $[61002+RANDOM%4532]
Проверьте http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml и выберите порт, который мало используется. (Желательно больше 1024)
Просто сделайте, как любой другой Linux deamon, создайте и прочтите .conf для настройки порта на случай, если пользователь захочет его изменить.