Eu tentei o ForceBindIP, mas tem uma desvantagem significativa - não afeta os filhos do aplicativo que estou tentando vincular, afeta apenas o próprio aplicativo. Ele também não pode forçar um aplicativo a sempre executar através de uma interface especificada, ele deve ser executado forcebindip.exe
sempre. Isso se torna um problema com aplicativos como League of Legends, onde a árvore de processos se parece com isso:
O iniciador executa o patcher, o patcher executa o cliente, etc. Só posso afetar o pai de todos esses processos na árvore, para que o jogo real não esteja vinculado à interface que desejo, tornando todo esse empreendimento inútil.
Existe uma alternativa mais moderna ao ForceBindIP para Windows 7? Existem muitas perguntas semelhantes a essa neste site, mas elas são principalmente antigas. Talvez agora haja uma maneira melhor de resolver esse problema?
Minha idéia atual é fazer o seguinte:
Configure o servidor 3proxy local vinculado à interface desejada.
Execute o jogo através do Proxifier ou software similar configurado para executar esse proxy local.
Não tenho certeza se isso vai funcionar, mas mesmo que pareça, parece uma solução abaixo do ideal. Vocês têm alguma idéia melhor?
Edit: Minha ideia não funcionou :(
Edit 2: Basicamente, o que estou tentando alcançar é vincular alguns aplicativos a uma interface regular, enquanto a VPN está em execução. O motivo é que eu preciso me conectar através da VPN na maioria das vezes, mas alguns aplicativos (como jogos) não funcionam corretamente dessa maneira, devido a ping mais alto e outros problemas.
LolClient.exe
? ÉLolClient.exe
umx86
oux64
exe? Estou brincando com o injetor de DLL de terceiros e talvez eu possa ajudá-lo, mas preciso de mais informações.BindIp.dll
é de 32 bits, portanto não funcionaria com processos de 64 bits.Respostas:
Atualizar
Descobri que o ForceBindIp na verdade está passando parâmetros para os executáveis chamados. Apenas omite o primeiro parâmetro . Então, modifiquei meu script para usar em
ForceBindIp.exe
vez do injetor personalizado e agora parece que todos os problemas cominjectory
exceções se foram e tudo funciona.Aqui estão as etapas e o
BindIp.cmd
script modificados :Instale o ForceBindIp como de costume
Coloque em
BindIp.cmd
qualquer lugar da sua unidade (por exemploC:\BindIp\BindIp.cmd
)BindIp.cmd
roteiro:Em seguida, siga as etapas 2 a 6 abaixo.
Introdução
O ForceBindIp não pode injetar automaticamente
BindIp.dll
processos filho enão passa parâmetros para os executáveis chamados. Mas consegui contornar isso usando as Opções de execução de arquivo de imagem no registro , script em lote e injetor de DLL de terceiros . Os detalhes estão abaixo.Teoria
Para usar
BindIp.dll
semForceBindIp.exe
, precisamos descobrir como eles se comunicam (ForceBindIp.exe
tem que passar o endereço IP para a DLL de alguma forma).Usei o IDA gratuitamente e descobri que
ForceBindIp.exe
cria uma variável de ambiente com o nomeFORCEDIP
que contém o endereçoBindIp.dll
IP e lê o endereço IP dessa variável quando injetada e executada no processo de destino.Para detectar o lançamento do aplicativo de destino, podemos adicionar uma
Debugger
chave nas Opções de execução do arquivo de imagem no registro para este executável:O "Depurador", no nosso caso, será um script em lote, que definirá a
FORCEDIP
variável e iniciará o injetor dll-injector. O injetor iniciará o processo, transmitirá argumentos da linha de comando e injetaráBindIp.dll
.Prática
Crie uma pasta em algum lugar (
C:\BindIp
por exemplo) e coloque esses três arquivos nela:BindIp.dll
BindIp.cmd
BindIp.cmd
roteiro:LolClient.exe
) para o executável de destino noHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
Adicione o valor da cadeia a esta chave:
Debugger
C:\BindIp\BindIp.cmd
Conceda
Users
permissões totais a essa chave (o script precisará modificá-lo a cada inicialização). Deve ficar assim:Defina o endereço IP necessário em
BindIp.cmd
Repita os passos 3 e 4 para cada arquivo executável que você deseja bind (
rad_user_kernel.exe
,LolLauncher.exe
,LolPatcher.exe
, etc.).Agora, toda vez que você iniciar o executável com entrada de registro correspondente, o
BindIp.cmd
script será iniciado e vinculará esse programa ao endereço IP desejado.Conclusão
Eu testei isso no meu laptop executando o Windows 8.1 x64 e consegui vincular vários programas ( AIMP 2 , BersIRC , Opera 12.4 ) ao adaptador Ethernet ou WiFi usando esta técnica. Infelizmente,
BindIp.dll
é de 32 bits, portanto não funcionaria com processos de 64 bits.fonte
injectory
às vezes tem problemas com a--args
opção. Não sei por que.--args
com qualquer aplicaçãoForceBindIp
realmente pode passar parâmetros, veja minha resposta atualizada.Eu descobri que HideMyAss! O cliente VPN possui o recurso Secure IP Bind que permite vincular aplicativos à interface VPN:
Eu olhei para ele e é baseado em uma dll personalizada do provedor de serviços em camadas (LSP) e na interface COM para controlá-lo. E pode ser (ab) usado sem instalar o cliente VPN do HideMyAss.
Instalando a ligação IP segura do HideMyAss
bin
pasta no instalador descompactadoCopie esses três arquivos para uma pasta no seu disco (
C:\HMA_Bind
)Coloque
Install.cmd
eUninstall.cmd
nesta pastaInstall.cmd
Uninstall.cmd
Install.cmd
como administrador . Para verificar se a instalação foi bem-sucedida, você pode usar Autoruns :Windows PowerShell ISE (x86)
ouWindows PowerShell (x86)
porque o componente COM é de 32 bits.Primeiro, você deve criar o novo objeto Secure IP Bind:
E então você pode chamar de métodos:
Desinstalando a ligação de IP segura do HideMyAss
Uninstall.cmd
como administrador , verifique se a desinstalação foi bem-sucedida com as Execuções automáticas.Exemplos:
Observe que você precisa criar um objeto COM de vinculação de IP seguro apenas uma vez por sessão do PowerShell. Os exemplos abaixo pressupõem que você os execute em uma nova sessão do PowerShell, para que eles sempre criem um novo objeto COM.
Configure o IP para vincular, adicione
firefox
aos aplicativos vinculados, ative a ligação.Ative globalmente a ligação de IP:
Desative globalmente a ligação de IP:
Remova o aplicativo da lista (pare de vincular este aplicativo):
Notas
Como o Secure IP Bind implementado como uma dll LSP (Provedor de Serviços em Camadas) personalizado , essas limitações se aplicam:
Eu testei esse método com vários aplicativos com resultados mistos: aplicativos de 32 bits funcionam, mas 64 bits não, ou seja, consegui ligar o Explorer de 64 bits (provavelmente porque os processos de guias são 32 bits por padrão), mas navegador Waterfox não de 64 bits ou outros aplicativos de 64 bits.
fonte
Eu posso pensar em duas soluções para o problema:
Crie uma máquina virtual para executar o jogo, que use apenas o adaptador de rede.
Se você souber o intervalo de endereços IP que o jogo usa, construa uma rota de rede que direcione esse intervalo para o gateway do adaptador específico.
Posso adicionar mais informações assim que conhecer suas preferências. Por exemplo, no ponto 1, seu produto de máquina virtual preferido.
fonte
Vamos supor que você tenha duas contas de usuário do Windows:
HomeUser
VpnUser
Quando você faz login na
VpnUser
conta, pode executar aplicativos (principalmente os jogos mencionados) comoHomeUser
(Shift + RMB no arquivo executável -> Executar como outro usuário) e esses aplicativos executam seus processos filhos comoHomeUser
. Os aplicativos que você executará de maneira padrão (atalhos, clique duas vezes no arquivo executável) serão de propriedade deVpnUser
.Ao definir as conexões de rede do Windows, você tem a opção de permitir que outros usuários usem essa conexão. Vamos supor que você definiu:
HomeNetwork
exclusivamente paraHomeUser
VpnNetwork
exclusivamente paraVpnUser
e para simplificação:
Eu acho que as aplicações:
VpnUser
deve usar apenasVpnNetwork
.HomeUser
deve usar apenasHomeNetwork
.Se minha especulação for verdadeira, quando você fizer login na
VpnUser
conta, os aplicativos serão usadosVpnNetwork
, quando os aplicativos executados a partirHomeUser
daVpnUser
conta deverão ser utilizadosHomeNetwork
.fonte
forcebindip.exe pode ser usado, mas você deve codificar um aplicativo auxiliar (nenhuma outra opção).
O aplicativo carrega XXX.ini que contém ie
O aplicativo é executado
C: \ caminho1 \ app_to_run.exe 192.168.10.21 C: \ caminho1 \ app_to_run.exe Saved_Command_line
O aplicativo termina
PROBLEMA: O ForcebindIP não passa parâmetros para o programa chamado. se você precisar passar parâmetros para o app_to_run.exe, precisará de uma abordagem mais evoluída, em que o XXX.exe crie um arquivo em lotes, incluindo app_to_run.exe e os parâmetros passados, esse lote será chamado em vez de app_to_run.exe no ponto 4.
Você também pode dar uma olhada em alguns aplicativos da GUI que envolvem o ForcebindIP. Alguns deles podem trabalhar com mais de um aplicativo, mas não fazem o que você precisa.
https://www.raymond.cc/blog/bind-windows-application-to-specific-network-adapter-with-forcebindip/
fonte