Когда я подключаюсь к https://www.google.co.uk, это меняется на 216.58.198.228:443. Затем соединение со мной открывается на [Мой IP-адрес]:63998.
Мой вопрос: как выбрать порт 63998 и есть ли способ заставить его быть 63999.
Когда я подключаюсь к https://www.google.co.uk, это меняется на 216.58.198.228:443. Затем соединение со мной открывается на [Мой IP-адрес]:63998.
Мой вопрос: как выбрать порт 63998 и есть ли способ заставить его быть 63999.
Номер порта выбирается программным обеспечением реализации TCP из диапазона номеров портов, называемых эфемерными портами.
Точный механизм выбора номера порта и используемого диапазона зависит от операционной системы.
Это можно сделать, изменив конфигурацию программного обеспечения реализации TCP.
Инструкции по настройке диапазона эфемерных портов для различных операционных систем можно найти в разделе Изменение диапазона эфемерных портов.
Однако не стоит ограничивать диапазон одним портом, например 63999
.
На самом деле в Windows это невозможно, так как:
Минимальный диапазон портов, который можно установить, составляет 255.
Соединение TCP/IPv4 состоит из двух конечных точек, и каждая конечная точка состоит из IP-адреса и номера порта. Поэтому, когда пользователь клиента подключается к компьютеру-серверу, установленное соединение может рассматриваться как набор из четырех (IP-адрес сервера, порт сервера, IP-адрес клиента, клиентский порт).
Обычно три из четырех общеизвестны - клиентский компьютер использует свой собственный IP-адрес, а при подключении к удаленной службе требуются IP-адрес серверного компьютера и номер порта службы.
Что не сразу видно, так это то, что когда соединение установлено, клиентская сторона соединения использует номер порта. Если клиентская программа явно не запрашивает конкретный номер порта, используемый номер порта является эфемерным номером порта.
Эфемерные порты - это временные порты, назначаемые IP-стеком машины, и назначаются для этого назначенным диапазоном портов. Когда соединение завершается, эфемерный порт доступен для повторного использования, хотя большинство IP-стеков не будет повторно использовать этот номер порта, пока не будет использован весь пул эфемерных портов.
Таким образом, если клиентская программа переподключается, ей будет назначен другой временный номер порта для ее стороны нового соединения.
Источник Эфемерный Порт Порт
Linux:
Linux позволяет вам просматривать и изменять диапазон временных портов, просто используя файл
/proc/sys/net/ipv4/ip_local_port_range
. Например, здесь показана конфигурация по умолчанию в системе с ядром 2.2:$ cat /proc/sys/net/ipv4/ip_local_port_range 1024 4999
Чтобы изменить это на предпочтительный диапазон, вы можете сделать (как суперпользователь):
# echo "49152 65535" > /proc/sys/net/ipv4/ip_local_port_range
Обратите внимание, что вам придется делать это каждый раз при загрузке системы, поэтому обязательно добавьте строку в скрипт запуска системы, такой как
/etc/rc.local
чтобы ваш диапазон всегда использовался.Также обратите внимание, что ядро Linux 2.4 по умолчанию будет иметь диапазон от 32768 до 61000, если доступно достаточное количество памяти ядра, поэтому изменение диапазона может не потребоваться в более новых системах Linux.
Наконец, также обратите внимание, что вы можете использовать интерфейс
sysctl
для изменения настроек вместо использования файловой системы/proc
. Имя параметраsysctl
- «net.ipv4.ip_local_port_range». Отредактируйте/etc/sysctl.conf
если он у вас есть, или запустите сценарий запуска, запустите командуsysctl
вручную, если вы хотите изменить этот параметр с помощьюsysctl
.
Windows Vista/Windows Server 2008 и новее:
Начиная с Windows Vista и Windows Server 2008, Windows теперь использует большой диапазон (49152-65535) по умолчанию, согласно статье 929851 базы знаний Майкрософт. В той же статье также показано, как вы можете изменить диапазон при желании, но диапазон по умолчанию теперь достаточен для большинства серверов.
Источник Изменение диапазона эфемерных портов
Вы можете просмотреть динамический диапазон портов на компьютере под управлением Windows Vista или Windows Server 2008, используя следующие команды
netsh
:netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp netsh int ipv6 show dynamicport tcp netsh int ipv6 show dynamicport udp
Заметки:
- Диапазон устанавливается отдельно для каждого транспорта и для каждой версии IP.
- Диапазон портов теперь действительно является диапазоном с начальной точкой и конечной точкой.
- У клиентов Microsoft, которые развертывают серверы под управлением Windows Server 2008, могут возникнуть проблемы с RPC-связью между серверами, если во внутренней сети используются брандмауэры.
- В этих случаях рекомендуется переконфигурировать брандмауэры, чтобы обеспечить трафик между серверами в диапазоне динамических портов от
49152
до65535
.- Этот диапазон дополняет известные порты, которые используются сервисами и приложениями.
- Или диапазон портов, используемый серверами, можно изменить на каждом сервере.
Вы можете настроить этот диапазон с помощью команды
netsh
следующим образом:netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
Эта команда устанавливает динамический диапазон портов для TCP. Начальный порт - это номер, а общее количество портов - это диапазон. Ниже приведены примеры команд:
netsh int ipv4 set dynamicport tcp start=10000 num=1000 netsh int ipv4 set dynamicport udp start=10000 num=1000 netsh int ipv6 set dynamicport tcp start=10000 num=1000 netsh int ipv6 set dynamicport udp start=10000 num=1000
Эти примеры команд устанавливают динамический диапазон портов, начиная с порта 10000 и заканчивая портом
10999
(1000 портов).Заметки:
- Минимальный диапазон портов, который можно установить, составляет
255
.- Минимальный начальный порт, который можно установить, составляет
1025
.- Максимальный конечный порт (в зависимости от настраиваемого диапазона) не может превышать
65535
.- Чтобы продублировать поведение по умолчанию в Windows Server 2003, используйте
1025
в качестве начального порта, а затем используйте3976
в качестве диапазона для TCP и UDP. Это приводит к начальному порту1025
и конечному порту5000
.
Источник Статья базы знаний Microsoft 929851:
Windows XP и старше:
В старых операционных системах Windows (Windows XP и более ранних) Windows использует традиционный диапазон BSD от 1024 до 4999 для своего эфемерного диапазона портов. К сожалению, похоже, что вы можете установить только верхнюю границу диапазона эфемерного порта. Вот информация, взятая из статьи базы знаний Microsoft 196271:
- Запустите редактор реестра (
Regedt32.exe
).Найдите следующий ключ в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
В меню "Редактировать" нажмите "Добавить значение", а затем добавьте следующее значение реестра:
Имя значения:
MaxUserPort
Тип данных:REG_DWORD
Значение:65534
(например)Допустимый диапазон:
5000-65534
(десятичное число) По умолчанию:0x1388
(5000 десятичное число)Описание: Этот параметр контролирует максимальный номер порта, используемый, когда приложение запрашивает любой доступный пользовательский порт из системы. Обычно эфемерные (то есть недолговечные) порты распределяются между значениями от
1024
до5000
включительно.Закройте редактор реестра.
Примечание. Существует другая соответствующая статья базы знаний (812873), в которой утверждается, что вы можете установить диапазон исключения, что может означать, что вы можете исключить порты
1024-9999
(например), чтобы иметь диапазон эфемерных портов10000-65534
. Однако мы не смогли заставить его работать (по состоянию на октябрь 2004 года).
Источник Изменение диапазона эфемерных портов
Ответ Дэвида Постила совершенно верный. Я хотел бы просто добавить к этому, подчеркивая, что изменение диапазона временных портов в Linux настолько просто, что у ОП есть утвердительный ответ.
Вы меняете EPR следующим образом:
echo "40000 60000" > /proc/sys/net/ipv4/ip_local_port_range
и вы можете выбрать порт 50000 (в качестве примера) с помощью следующего скрипта:
OLD_RANGE=$(cat /proc/sys/net/ipv4/ip_local_port_range)
MY_PORT=50000
echo "$MY_PORT $MY_PORT" > /proc/sys/net/ipv4/ip_local_port_range
sudo -u SomeUser SomeApplication &
echo $OLD_RANGE" > /proc/sys/net/ipv4/ip_local_port_range
Одно предостережение: поскольку в диапазоне есть один порт, другое приложение может вырвать его у вас между выполнением третьей и четвертой строк выше; Кроме того, даже если нет условий гонки, вы будете парализовать все другие приложения, пока не восстановите большой EPR, поэтому я восстановил исходный диапазон как можно скорее.
Таким образом, если бы операционная система OP была Linux, ответ был бы таков: это легко сделать.
Удивительно, но это не так просто на BSD, некоторые из которых даже не имеют настройки ядра времени выполнения для EPR. MacOS X, FreeBSD и OpenBSD требуют изменения файла /etc/sysctl.conf, но у них есть разные варианты для EPR.
Независимо от вышесказанного и от ОС, тот факт, что что-то можно сделать, не означает, что это должно быть сделано: зачем вам это нужно на Земле? Я не могу придумать ни одного варианта использования.
Стоит добавить, что ядро Linux также имеет
net.ipv4.ip_local_reserved_ports
ручка, которая работает несколько наоборот, но, тем не менее, она может быть очень полезна, потому что таким образом вы можете "пробить дыру" для сервисов, которые открывают определенные порты в других эфемерных диапазонах портов.
Краткая выдержка из документов:
Укажите порты, которые зарезервированы для известных сторонних приложений. Эти порты не будут использоваться для автоматического назначения портов (например, при вызове connect () или bind () с номером порта 0). Явное распределение портов не изменяется.
Формат, используемый для ввода и вывода, представляет собой список диапазонов, разделенных запятыми (например, «1,2-4,10-10» для портов 1, 2, 3, 4 и 10). Запись в файл очистит все ранее зарезервированные порты и обновит текущий список тем, который указан во входных данных.