Вопрос или проблема
Мне нужно симулировать подключение/отключение приложения к ip:port.
Я не могу изменять правила брандмауэра, так как они управляются только IT. Я должен быть осторожен, чтобы не отключить сетевой интерфейс, так как это удаленная машина (Citrix VDI).
Я хочу использовать netsh portproxy. Моя теория заключается в том, что это должно перенаправить удаленный ip:port на 127.0.0.1:port.. и если я изменю локальный порт на что-то случайное, приложение должно потерять соединение.
Итак, я попробовал:
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=11111 connectaddress=somehostname.com connectport=11111
где 11111 – это фактический порт – приложение осталось подключенным. Когда я удалил это и запустил:
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=22222 connectaddress=somehostname.com connectport=11111
Я ожидал, что приложение потеряет соединение, но ничего не изменилось. Я подумал, что мог неправильно понять, что перенаправляет что, поэтому я попробовал
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=11111 connectaddress=somehostname.com connectport=22222
Снова – никаких изменений..
Какой правильный способ сделать это с использованием netsh portproxy?
Моя теория заключается в том, что это должно перенаправить удаленный ip:port на 127.0.0.1:port
Нет, это работает наоборот.
Portproxy на самом деле не перехватывает подключения – скорее, он работает очень похоже на HTTP ‘обратный прокси’ или SSH ‘локальный туннель’, где он начинает прослушивать подключения по адресу:порт listen
(используя стандартный TCP-слушатель) и подключается к адресу:порт connect
от имени клиента прокси. Поэтому такие названия параметров.
Таким образом, прокси работает только тогда, когда программы явно подключаются к адресу:порт listen
(в данном случае 127.0.0.1:port). Если они подключаются к чему-то еще, они обходят прокси.
Какой правильный способ сделать это с использованием netsh portproxy?
Нельзя сделать это с использованием netsh portproxy.
Ответ или решение
Как заблокировать/разблокировать доступ к определённому IP/порту с помощью netsh portproxy
Ваша задача заключается в имитации подключения и отключения приложения от определенного IP-адреса и порта на удалённой машине (например, Виртуальной Десктопной Инфраструктуре Citrix). К сожалению, в этом случае необходимо учитывать, что вы не можете изменить правила брандмауэра, так как они находятся под управлением IT-отдела. Однако использование netsh portproxy
может быть решением, если правильно понять его работу.
Принцип работы netsh portproxy
Команда netsh interface portproxy
предназначена для перенаправления сетевых подключений. Важно понимать, что этот инструмент работает на основе концепции "прослушивания" и "соединения". То есть, он работает следующим образом:
- listenaddress/listenport: адрес и порт, на который
portproxy
будет слушать входящие соединения (например,127.0.0.1:port
). - connectaddress/connectport: адрес и порт, к которому
portproxy
подключается от имени клиента (например,somehostname.com:port
).
Если приложение подключается напрямую к IP-адресу удалённого сервера, оно не будет использовать portproxy
, что объясняет, почему изменение настроек не влияет на подключение.
Правильный подход к решению вашей задачи
Для достижения вашей цели, можно использовать два подхода:
-
Перенаправление на локальный порт.
Если вы хотите, чтобы приложение теряло соединение, приложите усилия для того, чтобы оно подключалось кlistenaddress
иlistenport
, которые вы зададите. Например:netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=11111 connectaddress=somehostname.com connectport=11111
После этого следующий шаг – изменить настройку вашего приложения, чтобы оно подключалось к
127.0.0.1:11111
, а не к удаленному IP-адресу. -
Блокировка доступа к удаленному IP.
Если приложение не поддерживает изменение адреса подключения, есть альтернативные способы отключения доступа. Хотя вы не можете изменять правила брандмауэра, существуют другие опции, например, создание локального фаервола, который будет блокировать соединения на уровне ОС (если это разрешено вашей политикой).
Заключение
Использование netsh portproxy
может быть эффективным для перенаправления входящих соединений, но важно помнить о его ограничениях. Если приложение не подключается напрямую к 127.0.0.1:port
, тогда изменения с помощью portproxy
не смогут принудительно разорвать соединение с удалённым сервером.
Если у вас есть возможность менять настройки вашего приложения, попробуйте перенастроить его на использование порта, который слушает ваш созданный прокси. В противном случае вам следует рассмотреть альтернативные варианты, или обратиться к IT-отделу для получения разрешения на изменение конфигураций, связанных с брандмауэром или сетевыми настройками.