Как избежать переадресации портов?

Задания - это внутреннее понятие оболочки. Вы не можете манипулировать таблицей заданий оболочки извне.

Вы можете управлять процессами как таковыми. Невозможно определить, является ли процесс заданием данной оболочки, все, что вы можете сделать, это предположить. Вы можете перечислить процессы, родительский идентификатор которых является PID оболочки; вы можете перечислить процессы, которые являются лидерами группы процессов и работают на том же терминале, что и оболочка. См. этот вопрос о переполнении стека , чтобы узнать о некоторых способах получения информации о процессах в Python.

Если вам нужно управлять заданиями в скрипте Python, вам действительно следует запускать и управлять процессами из скрипта Python, если это вообще возможно. Все, что вам нужно, находится в модуле подпроцесса .

1
23.09.2018, 19:12
1 ответ

Обычно ваш интернет-провайдер предоставляет вам один IP-адрес,и ваш домашний маршрутизатор выполняет преобразование сетевых адресов(NAT ), чтобы сделать вид, что все устройства в вашей домашней сети — это просто одно устройство с тем же адресом, что и сам маршрутизатор.

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

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

Другого пути нет, независимо от того, какой протокол вы используете.

Вы также можете заплатить своему интернет-провайдеру за предоставление более одного IPv4-адреса (это будет дорого ). Или, если ваш интернет-провайдер дает вам глобальный префикс IPv6, то каждое из устройств в вашей домашней сети будет иметь свой собственный IPv6-адрес, доступный извне. Таким образом, нет NAT, нет необходимости в переадресации портов, но это будет работать только для IPv6.

OTOH, настройка переадресации портов не совсем черная магия, так что просто сделайте это.

Редактировать

Когда вы "посетите веб-сайт", т.е. ваш локальный httpклиент свяжется с удаленным httpсервером , NAT в маршрутизаторе перезапишет исходный адрес исходящих пакетов с адреса вашего частного устройства на IP-адрес провайдера. Он также запомнит, что локальное устройство открыло исходящее соединение, и когда придут входящие пакеты, принадлежащие этому соединению, оно, наоборот, перезапишет адрес назначения и отправит их на локальное устройство. Вот что такое НАТ.

Таким образом, для исходящих соединений с вашего локального устройства переадресация портов не требуется. NAT сделает это за вас.Для входящих соединений, например. если вы используете сервер http , вам нужно сказать маршрутизатору: «Переадресуйте порт 80 на следующее локальное устройство».

How can i open the port without accesing router settings?

Для входящих соединений нельзя. Как я уже пытался объяснить.

Редактировать

Если вы погуглите примеры программ для UDP, всегда будет сервер , прослушивающий порт, и клиент , который не слушает, но связывается с сервером (и после что и сервер, и клиент могут обмениваться пакетами в любом направлении ). Итак, «как вы получаете информацию, не прослушивая порт», заключается в том, что вы пишете клиент, а не сервер, а затем сервер может отправлять данные клиенту, поэтому клиент «получает информацию».

Вы не можете запустить сервер за NAT без переадресации портов. Период. Как бы часто вы не спрашивали. Ни для TCP, ни для UDP, ни для «использования протокола низкого уровня».

Если вы не хотите включать переадресацию портов в графическом интерфейсе маршрутизатора :Многие маршрутизаторы позволяют настроить переадресацию портов, иногда даже временную, через UPnP. Ваш маршрутизатор может иметь или не иметь эту функцию.

Есть и другие приемы, например, сначала установить связь с сервером общего типа, который затем установит соединение с каким-либо другим узлом за NAT (, см., например,. протокол STUN ).

Но если вы находитесь за NAT, вам сначала нужно связаться с сервером в «настоящем» Интернете. Этот сервер будет прослушивать порт, а ваш клиент — нет. Или, если у вас есть сервер, прослушивающий порт, вам необходимо настроить переадресацию портов. Другого выбора нет. Живи с этим.

2
27.01.2020, 23:31

Теги

Похожие вопросы