Como posso especificar IP e portas para um nome de host no arquivo de hosts do Windows?

14

Eu quero especificar nomes de host com duas portas diferentes no arquivo hosts do Windows.

Existe uma maneira de fazer isso? Ou não é permitido pelo próprio Windows?

Eu perdi meu tempo procurando a solução nas últimas 8 horas.

É possível especificar portas no arquivo host, hosts ? Por exemplo: 127.0.0.1:80 e 127.0.0.1:9211

    
por Peter Mortensen 21.02.2010 / 19:39

3 respostas

13

Você não pode associar um número de porta a um nome de host mapeado a um IP no arquivo de hosts. Você pode conseguir isso com o Fiddler usando o FiddlerScript:

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
    
por 21.02.2010 / 19:47
13

Basta usar endereços IP sem portas. Exemplo:

192.168.2.50  example.com

Então, para acessar 192.168.2.50:5555 do seu navegador (ou outro programa):

http://example.com:5555/

(O arquivo hosts pode ser encontrado em C:\Windows\System32\drivers\etc\hosts .)

    
por 15.11.2012 / 09:54
3
  • O arquivo hosts é apenas para resolução de nomes de host
  • O navegador , na ausência de especificar diretamente a porta: ou seja, <hostname>:<port> , padrões para a porta 80

Cenário Típico do Problema

  1. aplicativos normalmente definem seus servidores para o mesmo endereço IP padrão 127.0.0.1 aka localhost (definido no arquivo de hosts) .
  2. para evitar a colisão entre possivelmente outros servidores existentes / em execução, o aplicativo normalmente permite que você altere a porta, mas não o endereço IP.

    2a. Se você puder alterar o endereço IP dos servidores para outro no espaço de endereço reservado de loopback 127.0.0.0/8 , então você provavelmente não estaria tentando definir portas no arquivo de hosts.

Solução possível

Você pode contornar isso usando a ferramenta de rede Windows incluída netsh como um proxy de porta.

Visão geral

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

Ações

  • Inicie seu servidor em localhost:8081
  • Adicione o "DNS local" no arquivo de hosts como uma nova linha
    • %código%
      • Qualquer endereço gratuito na rede 127.65.43.21 example.app pode ser usado.
      • Observação: estou assumindo que 127.0.0.0/8 não está ocupado por outro serviço.
      • Você pode verificar com 127.65.43.21:80
  • adicione a seguinte configuração de rede com o utilitário netsh command
    • netstat -a -n -p TCP | grep "LISTENING"
  • Acesse o servidor em netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1

Notas:
 - Estes comandos / modificações de arquivo precisam ser executados com direitos de administrador

- netsh o portproxy precisa de bibliotecas ipv6 mesmo apenas para usar o v4tov4, normalmente elas também ser incluído por padrão, caso contrário, instale-os usando o seguinte comando: http://example.app

Você pode ver a entrada adicionada com o comando:

netsh interface ipv6 install

Você pode remover a entrada com o seguinte comando:

netsh interface portproxy show v4tov4

Links para recursos:

Observação: essa resposta é uma duplicação da minha resposta discutida em esta pergunta / resposta semelhante em stackoverflow.

    
por 15.09.2016 / 11:44