¿Cómo puedo especificar IP y puertos para un nombre de host en el archivo de hosts de Windows?

18

Quiero especificar nombres de host con dos puertos diferentes en el hostsarchivo de Windows .

¿Hay una manera de hacerlo? ¿O no está permitido por el propio Windows?

He estado perdiendo el tiempo buscando la solución durante las últimas 8 horas.

¿Es posible especificar puertos en el archivo host hosts? Por ejemplo: 127.0.0.1:80y127.0.0.1:9211

Peter Mortensen
fuente
1
El archivo HOSTS solo asocia nombres con direcciones IP, no IP + puerto (s). Sin embargo, consulte superuser.com, describiendo más detalles de lo que está tratando de hacer (esto es para un servidor web, etc., etc.), ya que hay muchas maneras de lograr este tipo de mapeo, pero siempre dependiendo de los detalles. a mano.
Necesita un servidor NGNIX o Apache HTTP como servidor proxy para reenviar solicitudes HTTP a la aplicación apropiada -> que escucha un puerto en particular
Musa

Respuestas:

18

Simplemente use direcciones IP sin puertos. Ejemplo:

192.168.2.50  example.com

Luego, para acceder a 192.168.2.50:5555 desde su navegador (u otro programa):

http://example.com:5555/

El hostsarchivo se puede encontrar en:

Linux /etc/hosts

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

devi
fuente
Será útil agregar la ruta y el nombre del archivo a editar.
nyedidikeke
@nyedidikeke gracias por comentar, arreglé esto
devi
1
¿Puede actualizar con el motivo por el que NO especifica el número de puerto al editar el archivo en C:\Windows\System32\drivers\etc\hosts?
nyedidikeke
Eso está cubierto en las otras respuestas.
Scott, el
17

No puede asociar un número de puerto con un nombre de host asignado a una IP en el archivo de hosts. Puede lograr esto con Fiddler utilizando FiddlerScript: 

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
John T
fuente
77
Buena sugerencia para usuarios de tecnología. Solo para aclarar, 1) Primero instale Fiddler 2) Luego ábralo y vaya al Menú de Reglas y seleccione la opción Personalizar Reglas (o presione Ctrl + R en Windows). Esto abrirá un archivo JS en el bloc de notas. 3) Encuentre la función estática OnBeforeRequest y pegue el script sugerido por @John dentro de su cuerpo. También HostNameIs no funcionará, debería ser HostnameIs. Espero que esto ayude.
Riz
¿Conoce alguna alternativa de código abierto (james, owasp zap u otra) que pueda usarse para el mismo efecto?
Marc.2377
5
  • El hostsarchivo es solo para resolución de nombre de host
  • El navegador , en ausencia de especificar directamente el puerto: es decir <hostname>:<port>, valores por defecto al puerto80

Escenario de problema típico

  1. Por lo general, las aplicaciones configuran sus servidores con la misma dirección IP predeterminada, 127.0.0.1también conocida localhost (definida en el archivo hosts) .
  2. Para evitar la colisión entre posiblemente otros servidores existentes / en ejecución, la aplicación generalmente le permite cambiar el puerto, pero no la dirección IP.

    2a. Si pudiera cambiar la dirección IP de los servidores a otra en el espacio de direcciones reservado de bucle invertido 127.0.0.0/8 , entonces probablemente no estaría intentando establecer puertos en el archivo de hosts.

Solución posible

Puede solucionar esto utilizando la herramienta de red incluida en Windowsnetsh como proxy de puerto.


Visión general

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

Comportamiento

  • Inicie su servidor en localhost:8081
  • Agregue el "DNS local" en el archivo de hosts como una nueva línea
    • 127.65.43.21 example.app
      • Se 127.0.0.0/8puede usar cualquier dirección libre en la red .
      • Nota: supongo que127.65.43.21:80no está ocupado por otro servicio.
      • Puedes consultar con netstat -a -n -p TCP | grep "LISTENING"
  • agregue la siguiente configuración de red con la utilidad de comando netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Acceda al servidor en http://example.app

Notas:
- Estas modificaciones de comandos / archivos deben ejecutarse con derechos de administrador

- netsh portproxy necesita bibliotecas de ipv6 incluso solo para usar v4tov4, por lo general, también se incluirán de forma predeterminada; de lo contrario, instálelas con el siguiente comando:netsh interface ipv6 install


Puede ver la entrada que ha agregado con el comando:

netsh interface portproxy show v4tov4

Puede eliminar la entrada con el siguiente comando:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Enlaces a recursos:

Nota: esta respuesta es una duplicación de mi respuesta discutida en esta pregunta / respuesta similar en stackoverflow.

Pau Coma Ramirez
fuente