Прив’яжіть додаток до певного мережевого інтерфейсу


17

Я спробував ForceBindIP, але він має суттєвий мінус - це не впливає на дітей програми, яку я намагаюся зв’язати, це впливає лише на саму програму. Він також не може змусити програму завжди працювати через визначений інтерфейс, її потрібно запускати forcebindip.exeкожен раз. Проблема стає з такими додатками, як League of Legends, де дерево процесів виглядає так:

скріншот

Запуск запуску патчера, патчер запускає клієнта і т. Д. Я можу вплинути лише на батьків усіх цих процесів у дереві, тому фактична гра не пов'язана з інтерфейсом, який я хочу, роблячи це ціле підприємство безглуздим.

Чи є більш сучасна альтернатива ForceBindIP для Windows 7? На цьому сайті є багато питань, подібних до цього, але вони здебільшого старі. Може, зараз є кращий спосіб вирішити цю проблему?

Моя сьогоднішня ідея полягає в тому, щоб зробити наступне:

  1. Налаштуйте локальний 3-проксі-сервер, прив'язаний до потрібного інтерфейсу.

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

Я не впевнений, чи це спрацює, але навіть якщо це буде, це здається неоптимальним рішенням. У вас, хлопці, є якісь кращі ідеї?

Редагувати: моя ідея не спрацювала :(

Редагувати 2: В основному, я намагаюся досягти - прив’язати кілька додатків до звичайного інтерфейсу, поки VPN працює. Причина полягає в тому, що мені потрібно підключатися через VPN більшу частину часу, але деякі програми (наприклад, ігри) не працюють належним чином таким чином, через вищий пінг та інші проблеми.


Вам потрібно прив’язати до IP кожен процес у дереві чи лише LolClient.exe? Є чи або ех? Я граю з стороннім інжектором dll і, можливо, я можу вам допомогти, але мені потрібна додаткова інформація. LolClient.exex86x64
beatcracker

Ви намагаєтеся прив’язати процес до інтерфейсу VPN або до звичайного інтерфейсу?
MariusMatutiae

Чи є якась конкретна мета, яку ви намагаєтесь досягти? За замовчуванням для правильної роботи грі не потрібні вхідні з'єднання. Ви намагаєтеся обдурити чи записувати / відтворювати ігри?
Маріо

Я шукав відповідь на це основне питання, але для господарів OSX. Моє використання - я одночасно включаю LAN та WiFi. LAN - це корпоративна мережа з обмеженим доступом, Wi-Fi на моєму WAP. Мені іноді потрібен веб-переглядач або додаток, щоб використовувати лише wi-fi, щоб я міг зменшити файли, заблоковані нашим брандмауером.
SaxDaddy

1
@VictorMarchuk Так, він BindIp.dllє 32-розрядним, тому він не працює з 64-бітовими процесами.
beatcracker

Відповіді:


10

Оновлення

Я виявив, що насправді 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 як - то).

Я використовував IDA безкоштовно і виявив, що ForceBindIp.exeстворює змінну середовища з ім'ям, FORCEDIPщо містить IP-адресу і BindIp.dllзчитує IP-адресу з цієї змінної, коли вона вводиться і виконується в цільовому процесі.

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

Kernel32! CreateProcess, коли викликається без прапорів створення DEBUG_PROCESS або DEBUG_ONLY_THIS_PROCESS, перевіряє реєстр, чи не встановлено IFEO на виконуваному файлі, який він запускає. Якщо так, то він просто попереджує шлях налагодження до імені виконавця, ефективно отримуючи виконуваний файл для запуску під налагоджувачем.

"Налагоджувач" в нашому випадку буде пакетним сценарієм, який встановить FORCEDIPзмінну і запустить інжекторний 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. Додайте значення String до цього ключа:

    • Ім'я: Debugger
    • Значення: C:\BindIp\BindIp.cmd
  3. Надайте Usersповні дозволи на цей ключ (сценарій повинен буде змінювати його при кожному запуску). Це повинно виглядати так:Ключ реєстру IFEO

  4. Введіть потрібну IP-адресу в BindIp.cmd

  5. Повторіть кроки 3 і 4 для кожного виконуваного файлу , який ви хочете , щоб зв'язати ( rad_user_kernel.exe, LolLauncher.exe, LolPatcher.exeі т.д.).

Тепер, кожного разу, коли ви запускаєте виконуваний файл з відповідним записом реєстру, BindIp.cmdсценарій замість цього запускається і прив'язує цю програму до потрібної IP-адреси.

Висновок

Я перевірив це на своєму ноутбуці під керуванням Windows 8.1 x64 і міг успішно прив’язувати різні програми ( AIMP 2 , BersIRC , Opera 12.4 ) до Ethernet або WiFi адаптера за допомогою цієї методики. На жаль, він BindIp.dllє 32-розрядним, тому він не працює з 64-бітовими процесами.


Дуже дякую за детальне пояснення! На жаль, я отримую якийсь виняток з ін'єкцій: github.com/blole/injectory/isissue/4
Віктор Марчук

@VictorMarchuk Я зробив більше тестів, і справді, injectoryіноді виникають проблеми з --argsможливістю. Не знаю чому.
beatcracker

Я не зміг її запустити навіть без --argsжодної програми
Віктор Марчук

@VictorMarchuk У вас є приклад? Я щойно тестував його з Opera 12.14 та командним рядком - він працював чудово.
beatcracker

@VictorMarchuk Здається, що ForceBindIpнасправді можна передати параметри, дивіться мою оновлену відповідь.
beatcracker

4

Я виявив, що HideMyAss! VPN-клієнт має функцію Secure IP Bind, яка дозволяє прив’язувати програми до інтерфейсу VPN:

Безпечний IP-зв'язок дозволяє змусити вибрані програми на вашому комп’ютері працювати лише після підключення до наших VPN-серверів. Це гарантує, що вибрані програми працюватимуть лише за захищеним зашифрованим з'єднанням. Якщо ви відкриєте вибрані програми, не підключаючись до нашої VPN, вони не зможуть отримати доступ до Інтернету.

Я переглянув це, і він заснований на користувальницькому інтерфейсі dll та інтерфейсі постачальника послуг (LSP) з багаторівневим керуванням. І його можна (ab) використовувати без встановлення VPN-клієнта HideMyAss.

Встановлення захищеного IP-зв’язку HideMyAss

  1. Отримайте найновіший інсталятор Windows: https://www.hidemyass.com/downloads
  2. Розпакуйте його 7-блискавкою. Ігноруючи попередження про файли з однаковою назвою, ви можете їх безпечно перезаписати.
  3. Перейдіть до binпапки в розпакованому інсталяторі
  4. Скопіюйте ці три файли в папку на своєму диску ( C:\HMA_Bind)

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. Покладіть 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. Запустити Install.cmd як адміністратор . Щоб переконатися, що установка вдалася, ви можете використовувати Autoruns :

Провайдери Winsock в Ауторунах

  1. Для управління безпечним IP-зв'язком вам потрібно зателефонувати за методами COM-інтерфейсу. Це можна зробити в PowerShell. Якщо ви перебуваєте в операційній системі x64, не забудьте запустити Windows PowerShell ISE (x86)або Windows PowerShell (x86), оскільки компонент COM є 32-розрядним.

По-перше, ви повинні створити новий об'єкт захищеного IP-зв’язку:

# 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()

Видалення захищеного IP-зв’язку HideMyAss

  1. Запустіть Uninstall.cmd як адміністратор і переконайтеся, що видалення встановлено за допомогою Autoruns.

Приклади:

Зауважте, що вам потрібно створити захищений IP-об'єкт COM Bind лише один раз за сеанс 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-зв’язок, реалізований як призначений для користувача стандартний шаруватий постачальник послуг (LSP) , ці обмеження застосовуються:

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

Я перевіряв цей метод у різних програмах зі змішаними результатами: 32-розрядні програми працюють, але 64-бітні ні, тобто мені вдалося зв’язати 64-розрядний Провідник (можливо, тому що його вкладки за замовчуванням є 32-бітними), але не 64-розрядний браузер Waterfox або інші 64-розрядні програми.


3

Я можу придумати два рішення проблеми:

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

  2. Якщо ви знаєте діапазон IP-адрес, які використовує гра, побудуйте мережевий маршрут, який спрямовує цей діапазон до шлюзу певного адаптера.

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


1
Використання VM створило б багато додаткових проблем, таких як зниження продуктивності та постійне використання декількох ГБ оперативної пам’яті. Це мій останній варіант вдачі, я б дійсно вважав за краще досягти цього якось іншим способом. Я не знаю точного діапазону IP-адрес, які мені потрібно буде прив’язати, тому що він мені потрібен для всіляких програм, включаючи програмне забезпечення для спільного використання p2p (торрент). Можливо, є брандмауер, який дозволяє створювати маршрути на основі з'єднань, встановлених кожною програмою?
Віктор Марчук

Продуктивність: VM не призведе до зниження продуктивності, якщо не використовувати старий віртуальний ПК. Пам'ять: VMware і VirtualBox не виділяють всю пам'ять одразу, тому виділяється лише пам'ять, яка дійсно потрібна. Вони також мають додаткову перевагу для гри в тому, що зможуть призупинити та відновити VM / гру в більш пізній час, що набагато краще, ніж збереження здібностей більшості ігор. Для діапазонів IP: Якщо у вас їх багато, зазначене вище не є практичним і не є проксі.
harrymc

1
@harrymc Я сумніваюся, що можна було б отримати приємні 3D-ефекти від VM за допомогою емуляції GPU. А для прямого доступу до відеокарти досить складно налаштувати, і для цього потрібен VT-D (Intel) або AMD-Vi CPU (і це не дешево).
beatcracker

Такі процесори частіше, ніж ви думаєте: Список апаратного забезпечення , що підтримує IOMMU , але для проходження відео може знадобитися два графічних процесора. Однак, якщо вимоги до продуктивності не є величезними, VM на сьогоднішній день дає хороші показники відео. Використання VM - це моє рішення для екшн-ігор, які не можуть сприйняти мій розширений GPU, не відчуваючи помітного відставання. Більшість продуктів VM дозволяють контролювати емуляцію карти, наприклад, кількість відеопам'яті,
harrymc

2
Відповідь - так, і деякі люди це впоралися. Ось одна довідка: Налаштування Windows VM з графічним процесором , але можна знайти більше.
harrymc

3

Припустимо, у вас є два облікові записи користувачів Windows:

  • HomeUser
  • VpnUser

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

Під час визначення мережевих підключень Windows у вас є можливість дозволити іншим користувачам використовувати це з'єднання. Припустимо, що ви визначили:

  • HomeNetwork виключно для HomeUser
  • VpnNetwork виключно для VpnUser

та для спрощення:

  • Інших мережевих підключень на вашому комп’ютері немає.

В даний час у мене є одна машина Windows, на якій я не можу багато зіпсувати, і я ніколи не перевіряв описані налаштування, тому я не впевнений, чи наведено нижче твердження.

Моя здогадка може бути обмежена вбудованим VPN-клієнтом Windows - будь-який третій сторонній VPN-клієнт потребує подальшого дослідження.

Я думаю, що програми:

  • У власності VpnUserмає використовуватись лише VpnNetwork.
  • У власності HomeUserмає використовуватись лише HomeNetwork.

Якщо мої міркування відповідають дійсності, тоді, коли ви входите в VpnUserобліковий запис, додатки будуть використовуватись VpnNetwork, коли програми повинні працювати як HomeUserз VpnUserоблікового запису HomeNetwork.


Я не впевнений, що ти маєш на увазі. Ви пропонуєте мені використовувати інший обліковий запис користувача Windows? Як це допоможе зв’язати конкретні програми? Здається, що ваше рішення дозволило б увімкнути / вимкнути VPN для всіх програм, але я вже можу це зробити, підключившись до VPN та відключившись від нього.
Віктор Марчук

2
@VictorMarchuk Я відредагував свою відповідь - сподіваюсь, це зараз зрозуміліше ...
g2mk

0

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.exe 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/


Ви маєте на увазі, що допоміжна програма перехопить спробу створення дочірнього процесу та замість цього запустить її через ForceBindIP? Якщо так, чи є у вас якісь пропозиції щодо того, як підійти до цього?
Віктор Марчук

Ти правий. додаток-помічник матиме ім'я кожного завершеного exe, і він закінчиться викликом відповідного оригінального exe через ForceBind. Звичайно, тут вам потрібна гра з перейменовуванням або каталогами, щоб уникнути 2-х exe з однаковою назвою під тим самим каталогом. Цей додаток-помічник можна легко закодувати, тобто в C
Pat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.