Когда я подключаюсь к https://www.google.co.uk, это меняется на 216.58.198.228:443. Затем соединение со мной открывается на [Мой IP-адрес]: 63998.
Мой вопрос: как выбрать порт 63998 и есть ли способ заставить его быть 63999.
networking
port
tcp
TheGathron
источник
источник
Ответы:
Как определяются локальные порты
Номер порта выбирается программным обеспечением реализации TCP из диапазона номеров портов, называемых эфемерными портами .
Точный механизм выбора номера порта и используемого диапазона зависит от операционной системы.
Есть ли способ заставить его быть 63999.
Это можно сделать, изменив конфигурацию программного обеспечения реализации TCP.
Инструкции по настройке диапазона эфемерных портов для различных операционных систем можно найти в разделе Изменение диапазона эфемерных портов .
Однако не стоит ограничивать диапазон, например, одним портом
63999
.На самом деле в Windows это невозможно, так как:
Эфемерный Порт Порт
Источник Эфемерный Порт Порт
Изменение диапазона эфемерного порта
Linux:
Windows Vista / Windows Server 2008 и новее:
Источник Изменение диапазона эфемерных портов
Источник Статья 929851 базы знаний Майкрософт :
Windows XP и старше:
Источник Изменение диапазона эфемерных портов
источник
bind
системный вызов перед вызовомconnect
. Некоторые приложения имеют возможность сделать это, другие приложения нет.Ответ Дэвида Постила совершенно верный. Я хотел бы просто добавить к этому, подчеркивая, что изменить диапазон временных портов в Linux настолько просто, что у ОП есть утвердительный ответ.
Вы меняете EPR следующим образом:
и вы можете выбрать порт 50000 (в качестве примера) с помощью следующего скрипта:
Одно предостережение: поскольку в диапазоне есть один порт, другое приложение может отхватить его от вас между выполнением третьей и четвертой строк выше; Кроме того, даже если нет условий гонки, вы будете парализовать все остальные приложения, пока не восстановите большой EPR, поэтому я восстановил исходный диапазон как можно скорее.
Таким образом, если бы операционная система OP была Linux, ответ был бы таков: это легко сделать.
Удивительно, но это не так просто на BSD, некоторые из которых даже не имеют настройки ядра времени выполнения для EPR. MacOS X, FreeBSD и OpenBSD требуют изменения файла /etc/sysctl.conf , но у них есть разные варианты для EPR.
Независимо от вышесказанного и ОС, тот факт, что что-то может быть сделано, не означает, что это должно быть сделано: зачем, черт возьми, это нужно? Я не могу думать об одном случае использования.
источник
BIND_PORT
необязательным, чтобы код по-прежнему можно было использовать точно так же, как и оригинал. Я думаю,htons(bind_port_env ? atoi(bind_port_env) : 0)
что сделал бы правильную вещь.Стоит добавить, что ядро Linux также имеет
net.ipv4.ip_local_reserved_ports
ручка, которая работает несколько наоборот, но тем не менее это может быть очень полезно, потому что таким образом вы можете «пробить дыру» для сервисов, которые открывают определенные порты в других эфемерных диапазонах портов.
Краткая выдержка из документов :
источник