it-swarm.com.de

Binden Sie die Anwendung an eine bestimmte Netzwerkschnittstelle

Ich habe ForceBindIP ausprobiert, aber es hat einen erheblichen Nachteil - es wirkt sich nicht auf die untergeordneten Elemente der Anwendung aus, die ich binden möchte, sondern nur auf die Anwendung selbst. Es kann auch nicht erzwingen, dass eine Anwendung immer über eine bestimmte Schnittstelle ausgeführt wird. Sie muss jedes Mal über forcebindip.exe ausgeführt werden. Bei Anwendungen wie League of Legends, bei denen der Prozessbaum folgendermaßen aussieht, tritt ein Problem auf:

screenshot

Der Launcher führt den Patcher, der Patcher den Client usw. aus. Ich kann nur das übergeordnete Element aller dieser Prozesse im Baum beeinflussen, sodass das eigentliche Spiel nicht an die von mir gewünschte Oberfläche gebunden ist.

Gibt es eine modernere Alternative zu ForceBindIP für Windows 7? Es gibt viele ähnliche Fragen auf dieser Seite, aber sie sind meistens alt. Vielleicht gibt es jetzt einen besseren Weg, um dieses Problem zu lösen?

Meine aktuelle Idee ist Folgendes:

  1. Richten Sie den lokalen 3proxy-Server ein, der an die gewünschte Schnittstelle gebunden ist.

  2. Führen Sie das Spiel über Proxifier oder eine ähnliche Software aus, die für die Ausführung über diesen lokalen Proxy konfiguriert ist.

Ich bin mir nicht sicher, ob das funktionieren wird, aber selbst wenn, scheint es eine suboptimale Lösung zu sein. Habt ihr bessere Ideen?

Edit: Meine Idee hat nicht funktioniert :(

Bearbeiten 2: Grundsätzlich versuche ich, einige Anwendungen an eine reguläre Schnittstelle zu binden, während VPN ausgeführt wird. Der Grund dafür ist, dass ich die meiste Zeit eine VPN-Verbindung herstellen muss, aber einige Anwendungen (z. B. Spiele) funktionieren auf diese Weise aufgrund von höherem Ping und anderen Problemen nicht ordnungsgemäß.

17
Victor Marchuk

Aktualisieren

Ich habe festgestellt, dass ForceBindIp tatsächlich Parameter an die aufgerufenen ausführbaren Dateien übergibt. Es wird nur der erste Parameter ausgelassen. Daher habe ich mein Skript so geändert, dass ForceBindIp.exe anstelle eines benutzerdefinierten Injektors verwendet wird. Jetzt scheinen alle Probleme mit injectory-Ausnahmen behoben zu sein und alles funktioniert.

Hier ist modifizierte Schritte und BindIp.cmd Skript:

  1. Installieren Sie ForceBindIp wie gewohnt

  2. Platzieren Sie BindIp.cmd an einer beliebigen Stelle auf Ihrem Laufwerk (z. B. C:\BindIp\BindIp.cmd).

BindIp.cmd script:

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

Befolgen Sie dann die Schritte 2-6 von unten.


Einführung

ForceBindIp kann BindIp.dll nicht automatisch in untergeordnete Prozesse und einfügen übergibt keine Parameter an die aufgerufenen ausführbaren Dateien. Ich konnte dies jedoch umgehen, indem ich Ausführungsoptionen für Bilddateien in der Registrierung , im Stapelskript und in der DLL eines Drittanbieters verwendete Injektor . Details sind unten.

Theorie

Um BindIp.dll ohne ForceBindIp.exe zu verwenden, müssen wir herausfinden, wie sie kommunizieren (ForceBindIp.exe muss die IP-Adresse irgendwie an die DLL übergeben).

Ich habe IDA-frei verwendet und festgestellt, dass ForceBindIp.exe eine Umgebungsvariable mit dem Namen FORCEDIP erstellt, die die IP-Adresse enthält, und BindIp.dll liest die IP-Adresse aus dieser Variablen, wenn sie vorhanden ist injiziert und im Zielprozess ausgeführt.

Um den Start der Zielanwendung zu erkennen, können wir einen Debugger-Schlüssel in den Ausführungsoptionen für Bilddateien in der Registrierung für diese ausführbare Datei hinzufügen:

Wenn Kernel32! CreateProcess ohne die Erstellungsflags DEBUG_PROCESS oder DEBUG_ONLY_THIS_PROCESS aufgerufen wird, wird in der Registrierung geprüft, ob IFEO für die ausführbare Datei festgelegt wurde, die gestartet wird. Wenn ja, wird der Debugger-Pfad einfach dem Namen der ausführbaren Datei vorangestellt, sodass die ausführbare Datei effektiv unter dem Debugger gestartet wird.

Der "Debugger" in unserem Fall ist ein Batch-Skript, das die Variable FORCEDIP setzt und den Injectory DLL-Injector startet. Injectory startet dann den Prozess, übergibt Befehlszeilenargumente und injiziert BindIp.dll.

Trainieren

  1. Erstelle irgendwo einen Ordner (C:\BindIp zum Beispiel) und lege diese drei Dateien darin ab:

BindIp.cmd script:

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. Erstellen Sie einen Registrierungsschlüssel (z. B. LolClient.exe) für das in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ ausführbare Ziel.
  2. Fügen Sie diesem Schlüssel einen Zeichenfolgewert hinzu:

    • Name: Debugger
    • Wert: C:\BindIp\BindIp.cmd
  3. Erteilen Sie Users die vollständigen Berechtigungen für diesen Schlüssel (das Skript muss sie bei jedem Start ändern). Es sollte so aussehen: IFEO registry key

  4. Stellen Sie die gewünschte IP-Adresse in BindIp.cmd ein

  5. Wiederholen Sie die Schritte 3 und 4 für jede ausführbare Datei, die Sie binden möchten (rad_user_kernel.exe, LolLauncher.exe, LolPatcher.exe usw.).

Jedes Mal, wenn Sie eine ausführbare Datei mit einem entsprechenden Registrierungseintrag starten, wird stattdessen das Skript BindIp.cmd gestartet und dieses Programm an die gewünschte IP-Adresse gebunden.

Fazit

Ich habe dies auf meinem Laptop unter Windows 8.1 x64 getestet und konnte verschiedene Programme ( AIMP 2 , erfolgreich binden ) BersIRC , Opera 12.4 ) auf Ethernet- oder WiFi-Adapter mit dieser Technik. Leider ist BindIp.dll 32-Bit, sodass es mit 64-Bit-Prozessen nicht funktioniert.

10
beatcracker

Ich habe festgestellt, dass HideMyAss! VPN-Client Secure IP Bind -Funktion hat das erlaubt Anwendungen an die VPN-Schnittstelle zu binden:

Mit Secure IP Bind können Sie bestimmte Anwendungen auf Ihrem Computer so konfigurieren, dass sie nur funktionieren, wenn eine Verbindung zu unseren VPN-Servern besteht. Dies stellt sicher, dass ausgewählte Anwendungen nur hinter einer sicheren verschlüsselten Verbindung funktionieren. Wenn Sie ausgewählte Anwendungen öffnen, ohne mit unserem VPN verbunden zu sein, können diese nicht auf das Internet zugreifen.

Ich habe es angeschaut und es basiert auf einer benutzerdefinierten Layered Service Provider (LSP) DLL und COM-Schnittstelle, um es zu steuern. Und es kann (ab) verwendet werden, ohne den VPN-Client von HideMyAss zu installieren.

Installieren von HideMyAss Secure IP Bind

  1. Holen Sie sich das neueste Windows-Installationsprogramm: https://www.hidemyass.com/downloads
  2. Packe es mit 7-Zip aus. Wenn Sie Warnungen zu Dateien mit demselben Namen ignorieren, können Sie diese problemlos überschreiben.
  3. Wechseln Sie im entpackten Installationsprogramm in den Ordner bin
  4. Kopieren Sie diese drei Dateien in einen Ordner auf Ihrer Festplatte (C:\HMA_Bind)

    • ForceInterfaceCOM.dll
    • ForceInterfaceLSP.dll
    • InstallLSP.exe
  5. Fügen Sie Install.cmd und Uninstall.cmd in diesen Ordner ein

Install.cmd

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

Uninstall.cmd

%~dp0InstallLSP.exe -f
regsvr32 /u /s %~dp0ForceInterfaceCOM.dll
  1. Führen Sie Install.cmd als Administrator aus. Um zu überprüfen, ob die Installation erfolgreich war, können Sie Autoruns verwenden:

Winsock Providers in AUtoruns

  1. Um Secure IP Bind zu steuern, müssen Sie COM-Schnittstellenmethoden aufrufen. Dies kann in PowerShell erfolgen. Wenn Sie ein x64-Betriebssystem verwenden, müssen Sie Windows PowerShell ISE (x86) oder Windows PowerShell (x86) starten, da die COM-Komponente 32-Bit ist.

Zuerst müssen Sie ein neues Secure IP Bind-Objekt erstellen:

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

Und dann können Sie es Methoden aufrufen:

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

Deinstallation von HideMyAss Secure IP Bind

  1. Führen Sie Uninstall.cmd als Administrator aus, und überprüfen Sie, ob die Deinstallation mit Autoruns erfolgreich war.

Beispiele:

Beachten Sie, dass Sie ein sicheres IP Bind-COM-Objekt nur einmal pro PowerShell-Sitzung erstellen müssen. In den folgenden Beispielen wird davon ausgegangen, dass Sie sie in einer neuen PowerShell-Sitzung ausführen, sodass immer ein neues COM-Objekt erstellt wird.

  • Legen Sie die IP-Adresse für die Bindung fest, fügen Sie firefox zu den gebundenen Anwendungen hinzu und aktivieren Sie die Bindung.

    # 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-Bindung global aktivieren:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Enable binding
    $HmaFbi.SetEnabled($true)
    
  • IP-Bindung global deaktivieren:

    # Create new Secure IP Bind COM object
    $HmaFbi = New-Object -ComObject ForceInterfaceCOM.ForceInterface -ErrorAction Stop
    
    # Disable binding
    $HmaFbi.SetEnabled($false)
    
  • Anwendung von der Liste entfernen (Bindung für diese Anwendung beenden):

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

Anmerkungen

Da Secure IP Bind als benutzerdefinierte Layered Service Provider (LSP) -Dll implementiert ist, gelten folgende Einschränkungen:

LSPs sind seit Windows Server 2012 veraltet. Systeme, die LSPs enthalten, bestehen die Windows-Logoüberprüfungen nicht. Metro-Apps im Windows 8-Stil, die das Netzwerk verwenden, umgehen automatisch alle LSPs.

Ich habe diese Methode mit verschiedenen Anwendungen mit gemischten Ergebnissen getestet: 32-Bit-Anwendungen funktionieren, 64-Bit jedoch nicht, dh ich konnte den 64-Bit-Explorer binden (wahrscheinlich, weil die Tabulatorprozesse standardmäßig 32-Bit sind), aber nicht 64-Bit Waterfox Browser oder andere 64-Bit-Anwendungen.

4
beatcracker

Angenommen, Sie haben zwei Windows-Benutzerkonten:

  • HomeUser
  • VpnUser

Wenn Sie sich bei VpnUser anmelden, können Sie Anwendungen (insbesondere die von Ihnen erwähnten Spiele) als HomeUser ausführen (Umschalt + RMB für ausführbare Dateien -> Als anderer Benutzer ausführen). Diese Anwendungen führen ihre untergeordneten Prozesse als HomeUser aus. Anwendungen, die Sie standardmäßig ausführen (Verknüpfungen, Doppelklick auf die ausführbare Datei), gehören VpnUser.

Wenn Sie Windows-Netzwerkverbindungen definieren, haben Sie die Möglichkeit, anderen Benutzern die Verwendung dieser Verbindung zu ermöglichen. Nehmen wir an, Sie haben Folgendes definiert:

  • HomeNetwork exklusiv für HomeUser
  • VpnNetwork exklusiv für VpnUser

und zur Vereinfachung:

  • Es gibt keine anderen Netzwerkverbindungen auf Ihrem Computer.

Ich habe derzeit einen einzelnen Windows-Computer, auf dem ich nicht viel durcheinander bringen kann, und ich habe die beschriebenen Einstellungen noch nie überprüft, sodass ich nicht sicher bin, ob die folgende Aussage wahr ist.

Meine Vermutung ist möglicherweise auf den in Windows integrierten VPN-Client beschränkt. Jeder VPN-Client eines Drittanbieters erfordert weitere Untersuchungen.

Ich vermute , dass Anwendungen:

  • Eigentümer von VpnUser sollte nur VpnNetwork verwenden.
  • Eigentümer von HomeUser sollte nur HomeNetwork verwenden.

Wenn meine Spekulation zutrifft, verwenden Anwendungen bei der Anmeldung bei VpnUser account VpnNetwork, Anwendungen, die als HomeUser from VpnUser account ausgeführt werden, sollten HomeNetwork verwenden.

3
g2mk

Ich kann mir zwei Lösungen für das Problem vorstellen:

  1. Erstellen Sie eine virtuelle Maschine zum Ausführen des Spiels, die nur den einen Netzwerkadapter verwendet.

  2. Wenn Sie den IP-Adressbereich kennen, den das Spiel verwendet, erstellen Sie eine Netzwerkroute, die diesen Bereich zum Gateway des jeweiligen Adapters leitet.

Ich kann weitere Informationen hinzufügen, sobald ich Ihre Präferenzen kenne. Zum Beispiel in Punkt 1 Ihr bevorzugtes virtuelles Maschinenprodukt.

3
harrymc

forcebindip.exe kann verwendet werden, Sie müssen jedoch eine Hilfsanwendung codieren (keine andere Option).

  1. Die Anwendung speichert die von der Befehlszeile empfangenen Parameter
  2. Die Anwendung erhält ihren Namen, d. H. XXXX.EXE
  3. Die Anwendung lädt die Datei XXX.ini, die d. H.

    app_to_run = C:\path1\app_to_run.exe
    ForceBindIP = C:\path2\ForceBindIP.exe 
    IP          = 192.168.10.21
    
  4. Die Anwendung wird ausgeführt

    C:\path1\app_to_run.exe 192.168.10.21 C:\path1\app_to_run.exe Saved_Command_line

  5. Die Anwendung endet

PROBLEM: ForcebindIP übergibt keine Parameter an das aufgerufene Programm. Wenn Sie dann Parameter an app_to_run.exe übergeben müssen, benötigen Sie einen weiterentwickelten Ansatz, bei dem XXX.exe eine Batchdatei erstellt, die app_to_run.exe und die übergebenen Parameter enthält. Dieser Batch wird dann bei Punkt 4 anstelle von app_to_run.exe aufgerufen.

Sie können sich auch einige GUI-Apps ansehen, in denen ForcebindIP enthalten ist. Einige von ihnen können mit mehr als einer App arbeiten, aber sie tun nicht das, was Sie brauchen.

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

0
Pat