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

18

Quero especificar nomes de host com duas portas diferentes no hostsarquivo do Windows .

Existe uma forma 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:80e127.0.0.1:9211

Peter Mortensen
fonte
1
O arquivo HOSTS associa apenas nomes a endereços IP, não IPs + porta (s). No entanto, verifique o superuser.com, descrevendo mais detalhes do que você está tentando fazer (isso é para um servidor da web etc. etc.), pois existem várias maneiras de obter esse tipo de mapeamento, mas sempre dependendo dos detalhes. à mão.
Você precisa servidor HTTP NGNIX ou Apache como um servidor proxy para o encaminhamento http pedidos para aplicação apropriada -> que escuta porta específica
Musa

Respostas:

18

Basta usar endereços IP sem portas. Exemplo:

192.168.2.50  example.com

Em seguida, para acessar 192.168.2.50:5555 a partir do seu navegador (ou outro programa):

http://example.com:5555/

O hostsarquivo pode ser encontrado em:

Linux /etc/hosts

Windows :C:\Windows\System32\drivers\etc\hosts

devi
fonte
Será útil adicionar o caminho e o nome do arquivo a ser editado.
Nyedidikeke 15/09/16
@nyedidikeke obrigado pelo comentário, eu consertei isso #
devi
1
Você pode atualizar com o motivo para NÃO especificar o número da porta ao editar o arquivo em C:\Windows\System32\drivers\etc\hosts?
Nyedidikeke 15/09/16
Isso é coberto nas outras respostas.
Scott
17

Você não pode associar um número de porta a um nome de host mapeado para 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";
}
John T
fonte
7
Boa sugestão para usuários de tecnologia. Apenas para esclarecer, 1) Primeiro instale o Fiddler 2) Em seguida, abra-o e vá para o menu Rules e escolha a opção Customize Rules (ou pressione Ctrl + R na janela). Isso abrirá um arquivo JS no bloco de notas. 3) Encontre a função estática OnBeforeRequest e cole o script sugerido por @John dentro de seu corpo. O HostNameIs também não funcionará; ele deve ser o HostnameIs. Espero que isto ajude.
Riz
Você conhece alguma alternativa de código aberto (james, owasp zap ou outra) que possa ser usada com o mesmo efeito?
Marc.2377
5
  • O hostsarquivo é apenas para resolução de nome de host
  • O navegador , na ausência de especificar diretamente a porta: ou seja <hostname>:<port>, o padrão é port80

Cenário de problema típico

  1. os aplicativos normalmente configuram seus servidores para o mesmo endereço IP padrão, 127.0.0.1também conhecido como localhost (definido no arquivo hosts) .
  2. para evitar colisão entre possivelmente outros servidores existentes / em execução, o aplicativo normalmente permite alterar a porta, mas não o endereço IP.

    2a Se você pudesse alterar o endereço IP do servidor para outro no espaço de endereço reservado para loopback 127.0.0.0/8 , provavelmente não tentaria definir portas no arquivo de hosts.

Solução possível

Você pode contornar isso usando a ferramenta de rede incluída no Windowsnetsh 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
    • 127.65.43.21 example.app
      • Qualquer endereço gratuito na rede 127.0.0.0/8pode ser usado.
      • Nota: Estou assumindo que127.65.43.21:80não está ocupado por outro serviço.
      • Você pode verificar com netstat -a -n -p TCP | grep "LISTENING"
  • adicione a seguinte configuração de rede com o utilitário de comando netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Acesse o servidor em http://example.app

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

- netsh portproxy precisa de bibliotecas ipv6 mesmo para usar v4tov4; normalmente elas também serão incluídas por padrão; caso contrário, instale-as usando o seguinte comando:netsh interface ipv6 install


Você pode ver a entrada que você adicionou com o comando:

netsh interface portproxy show v4tov4

Você pode remover a entrada com o seguinte comando:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Links para Recursos:

Nota: esta resposta é uma duplicação da minha resposta discutida nesta pergunta / resposta semelhante no stackoverflow.

Pau Coma Ramirez
fonte