Привязка приложения к определенному сетевому интерфейсу

Я пробовал ForceBindIP, но у него есть существенный недостаток - он не влияет на потомков приложения, которое я пытаюсь привязать, он влияет только на само приложение. Он также не может заставить приложение всегда работать через указанный интерфейс, он должен быть запущен через forcebindip.exe каждый раз. Это становится проблемой с такими приложениями, как League of Legends, где дерево процессов выглядит так:

screenshot

пусковая установка запускает патчер, патчер запустите клиент и т. д. Я могу повлиять только на родителя всех этих процессов в дереве, поэтому фактическая игра не привязана к интерфейсу, который я хочу, что делает все это предприятие бессмысленным.

есть ли более современная альтернатива ForceBindIP для Windows 7? На этом сайте есть много вопросов, похожих на этот, но они в основном старые. Может быть, сейчас есть лучший способ решить эту проблему?

моя текущая идея состоит в том, чтобы сделать следование:

  1. настроить локальный 3proxy сервер, привязанный к нужному интерфейсу.

  2. запустить игру через Proxifier или аналогичное программное обеспечение, настроенное для запуска через этот локальный прокси.

Я не уверен, что это сработает, но даже если это будет, это кажется неоптимальным решением. У вас есть идеи получше?

Edit: моя идея не сработала: (

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

16
задан Victor Marchuk
08.12.2022 15:41 Количество просмотров материала 3143
Распечатать страницу

5 ответов

обновление

я обнаружил, что ForceBindIp фактически передает параметры вызываемым исполняемым файлам. Это просто опускает первый параметр. Поэтому я изменил свой скрипт, чтобы использовать ForceBindIp.exe вместо пользовательского инжектора и теперь это выглядит как все проблемы с injectory исключения исчезли, и все работает.

вот измененные шаги и BindIp.cmd сценарий:

  1. установить ForceBindIp как обычно

  2. поставить BindIp.cmd в любом месте вашего диска (например,C:\BindIp\BindIp.cmd)

BindIp.cmd сценарий:

setlocal

:: IP to bind to
set IP=192.168.128.85

:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=ForceBindIp.exe

:: ForceBindIp swallows first parameter passed to target exe,
:: so we inject dummy parameter just before it
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam%=%FirstParam% Dummy%%

:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f

:: Start target exe via ForceBindIp
%Injector% %IP% %TargetParams%

:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f

:: Debug, uncomment if needed
rem pause

endlocal

затем выполните шаги 2-6 снизу.


введение

ForceBindIp не может автоматически впрыскивает BindIp.dll дочерним процессам и не передает параметры вызываемым исполняемым файлам. Но я смог обойти это с помощью параметры выполнения файла изображения в реестре, пакетный скрипт и сторонние DLL инжектор. Подробности ниже.

теория

использовать BindIp.dll без ForceBindIp.exe нам нужно выяснить, как они общаются (ForceBindIp.exe должен как-то передать IP-адрес dll).

я использовал бесплатные Ида и обнаружил, что ForceBindIp.exe создает переменную окружения с именем FORCEDIP, который содержит IP-адрес и BindIp.dll считывает IP-адрес из этой переменной, когда он вводится и выполняется в target процесс.

для обнаружения запуска целевого приложения, мы можем добавить Debugger ключ в параметры выполнения файл образа в реестре на этот файл:

Kernel32!CreateProcess при вызове без DEBUG_PROCESS или DEBUG_ONLY_THIS_PROCESS флаги создания, проверяет реестр, чтобы увидеть, если IFEO был установлен на исполняемый файл, который его запускает. Если да, то он просто добавляет путь отладчика к имени исполняемого файла, эффективно получать исполняемый файл для запуска в отладчике.

"отладчиком" в нашем случае будет пакетный скрипт, который установит FORCEDIP переменная и запустить injectory dll-инжектор. Injectory затем запустим процесс, передадим аргументы командной строки и введем BindIp.dll.

практика

  1. создать папку где-то (C:\BindIp например) и положить эти три файла в это:

BindIp.cmd сценарий:

setlocal

:: IP to bind to. This env.var is used by BindIp.dll
set FORCEDIP=192.168.1.23

:: Common variables
set RegIFEO=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~nx1
set Injector=%~dp0injectory.x86.exe
set BindIpDll=%~dp0BindIp.dll

:: Extract target's parameters, if any
set AllParams=%*
set FirstParam=%1
call set TargetParams=%%AllParams:*%FirstParam% =%%

:: Delete debugger for the target exe in registry,
:: or we'll end in an endless loop of the batch files
reg delete "%RegIFEO%%" /v Debugger /f

:: Start target exe and inject BindIp.dll
if not [%2] == [] (
    :: If there were parameters for target exe, pass them on
    "%Injector%" --launch %1 --inject "%BindIpDll%" --args "%TargetParams%"
) else (
    :: No parameters were specified
    "%Injector%" --launch %1 --inject "%BindIpDll%"
)

:: Restore this script as debugger for the target exe in registry
reg add "%RegIFEO%" /v Debugger /t REG_SZ /d "%~dpnx0" /f

:: Debug, uncomment if needed
rem pause

endlocal
  1. создать раздел реестра (например,LolClient.exe) для целевого исполняемого файла в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
  2. добавить строковое значение к этому ключу:

    • название: Debugger
    • значение: C:\BindIp\BindIp.cmd
  3. Grant Users Полные права на этот ключ (скрипт должен будет изменять его при каждом запуске). Она должна выглядеть так:IFEO registry key

  4. укажите требуемый IP-адрес в BindIp.cmd

  5. повторите шаги 3 и 4 для каждого исполняемого файла, которые вы хотите связать (rad_user_kernel.exe,LolLauncher.exe,LolPatcher.exe, etc.).

теперь каждый раз, когда вы запускаете исполняемый файл с соответствующей записью реестра,BindIp.cmd скрипт запустите вместо этого и привязать эту программу к желаемому IP-адресу.

вывод

я проверил это на моем ноутбуке с Windows 8.1 x64 и смог успешно связать различные программы (AIMP 2,BersIRC,Opera 12.4) к переходнике локальных сетей или WiFi используя этот метод. К сожалению BindIp.dll 32-разрядный, поэтому он не будет работать с 64-битными процессами.

9
отвечен beatcracker 2022-12-09 23:29

Я могу придумать два решения проблемы:

  1. создать виртуальную машину для запуска игры, который использует только один сетевой адаптер.

  2. Если вы знаете диапазон IP-адресов, которые использует игра, создание сетевого маршрута, который направляет этот диапазон к шлюзу специфического переходника.

Я могу добавить больше информации, как только я знаю ваши предпочтения. Например, в пункте 1 предпочтительный виртуальный продукт машины.

4
отвечен harrymc 2022-12-10 01:46

я нашел это HideMyAss! VPN-клиент Безопасный IP Bind функция, позволяющая привязывать приложения к VPN интерфейсу:

Secure IP Bind позволяет принудительно выбранных приложений на вашем компьютер для работы только один раз подключен к нашим VPN-серверам. Это обеспечивает выбранные приложения будут работать только за защищенный соединение. При открытии выбранных приложений без подключения к нашему VPN, они не будут возможность доступа в интернет.

я посмотрел на него, и он основан на обычае поставщик многоуровневых служб (LSP) dll и COM интерфейс для управления. И его можно (ab)использовать без установки VPN-клиента HideMyAss.

установка HideMyAss ' Безопасный IP Bind

  1. сделать установщик для Windows: https://www.hidemyass.com/downloads
  2. распакуйте его с 7-zip. Игнорировать предупреждения о наличии файлов то же имя, вы можете безопасно перезаписать их.
  3. перейти к bin папка распакованного инсталлятора
  4. скопировать эти три файла в папку на диске (C:\HMA_Bind)

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. Put Install.cmd и Uninstall.cmd для этого папка

установить.cmd

%~dp0InstallLSP.exe -i -a -n "HMA_LSP" -d %~dp0ForceInterfaceLSP.dll
regsvr32 /s %~dp0ForceInterfaceCOM.dll

удалить.cmd

%~dp0InstallLSP.exe -f
regsvr32 /u /s %~dp0ForceInterfaceCOM.dll
  1. Run Install.cmd в качестве администратора. Чтобы убедиться, что установка прошла успешно, можно использовать Autoruns:

Winsock Providers in AUtoruns

  1. для управления Secure IP Bind, вы должны вызвать методы COM-интерфейса. Это можно сделать в PowerShell. Если вы находитесь на x64 OS, не забудьте запустить Windows PowerShell ISE (x86) или Windows PowerShell (x86), потому что компонент COM 32-разрядный.

во-первых, вы должны создать новый безопасный объект IP Bind:

# Create new Secure IP Bind COM object
$HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop

и затем вы можете вызвать его методы:

# Add bound application
# Not sure what second boolean argument does
$HmaFbi.AddApplicationHandled('firefox.exe', $true)

# Delete bound application
$HmaFbi.RemoveApplicationHandled('firefox.exe')

# Save applications to registry (applies bindings)
# Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
$HmaFbi.SaveToRegistry()

# List all bound applications
0..($HmaFbi.GetApplicationHandledCount() - 1) | ForEach-Object {$HmaFbi.GetApplicationName($_)}

# Set IP to bind to
$HmaFbi.SetInterfaceIP('192.168.1.23')

# Get stored IP
$HmaFbi.GetInterfaceIP()

# Enable binding
$HmaFbi.SetEnabled($true)

# Disable binding
$HmaFbi.SetEnabled($false)

# Show binding status
$HmaFbi.GetEnabled()

удаление HideMyAss ' Безопасный IP Bind

  1. Run Uninstall.cmd в качестве администратора убедитесь, что удаление не удалось Автозапуски.

примеры:

обратите внимание, что вы должны создать безопасный объект IP Bind COM только один раз за сеанс PowerShell. В приведенных ниже примерах предполагается, что они выполняются в новом сеансе PowerShell, поэтому они всегда создают новый COM-объект.

  • установить IP для привязки, добавить firefox для приложений, включить привязку.

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Set IP to bind to
    $HmaFbi.SetInterfaceIP('192.168.1.23')
    
    # Add bound application
    # Not sure what second boolean argument does
    $HmaFbi.AddApplicationHandled('firefox.exe', $true)
    
    # Save applications to registry (applies bindings)
    # Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
    $HmaFbi.SaveToRegistry()
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • глобально включить IP переплет:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • глобально отключить привязку IP:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Disable binding
    $HmaFbi.SetEnabled($false)
    
  • удалить приложение из списка (остановить привязку для этого приложения):

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Delete bound application
    $HmaFbi.RemoveApplicationHandled('firefox.exe')
    
    # Save applications to registry (applies bindings)
    # Setting are saved to: HKEY_CURRENT_USER\Software\ForceInterfaceCOM
    $HmaFbi.SaveToRegistry()
    

Примечания

потому что безопасный IP Bind реализован как пользовательский поставщик многоуровневых служб (LSP) DLL, те ограничения:

LSP устарели с Windows Server 2012. Системы включить LSP не будет проходить проверки логотипа Windows. Стиле Windows 8 приложения metro, использующие сеть, автоматически обходят все LSP.

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

4
отвечен beatcracker 2022-12-10 04:03

предположим, что у вас есть две учетные записи пользователей Windows:

  • HomeUser
  • VpnUser

при входе в VpnUser аккаунт вы можете запускать приложения (особенно игры, которые вы упомянули) как HomeUser (Shift + RMB на исполняемый файл - > Запуск от имени другого пользователя), и это приложения запускает свои дочерние процессы, как HomeUser. Приложения, которые вы будете запускать стандартным способом (ярлыки, двойной клик по исполняемому файлу) будут принадлежать VpnUser.

при определении сетевых подключений Windows у вас есть возможность разрешить другим пользователям использовать это подключение. Предположим, что вы определили:

  • HomeNetwork специально для HomeUser
  • VpnNetwork специально для VpnUser

и для упрощения:

  • на вашем компьютере нет других сетевых подключений.

я в настоящее время есть одна машина Windows, на которой я не могу много испортить, и я никогда не проверял описанную настройку, поэтому я не уверен, верно ли утверждение ниже.

мое предположение может быть ограничено встроенным VPN-клиентом Windows - любой 3-й VPN-клиент требует дальнейшего изучения.

I Угадай что приложений:

  • принадлежащий VpnUser использовать только VpnNetwork.
  • принадлежащий HomeUser использовать только HomeNetwork.

если мой предположение true, тогда при входе в VpnUser учетная запись приложения будет использовать VpnNetwork, когда приложения работают как HomeUser с VpnUser аккаунт должен использовать HomeNetwork.

3
отвечен g2mk 2022-12-10 06:20

forcebindip.exe может быть использован, но вы должны кодировать вспомогательное приложение (никакой другой вариант).

  1. приложение сохраняет параметры, полученные из командной строки
  2. приложение получает свое имя, т. е. XXXX.EXE
  3. приложение загружает XXX.ini, который содержит т. е.

    app_to_run = C:\path1\app_to_run.exe
    ForceBindIP = C:\path2\ForceBindIP.exe 
    IP          = 192.168.10.21
    
  4. приложение работает

    C:\path1\app_to_run.exe 192.168.10.21 C:\path1\app_to_run.исполняемый Saved_Command_line

  5. заканчивается

проблема: ForcebindIP не передает параметры вызываемой программе. затем, если вам нужно передать параметры в app_to_run.exe вам нужен более развитый подход, где XXX.exe создает пакетный файл, включающий app_to_run.exe и переданные параметры, этот пакет затем вызывается вместо app_to_run.exe в точке 4.

вы также можете взглянуть на некоторые приложения GUI упаковка ForcebindIP. Некоторые из них могут работать с несколькими приложениями, но они не делают то, что вам нужно.

https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/

1
отвечен Pat 2022-12-10 08:37

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх