web-dev-qa-db-fra.com

Comment spécifier l'adresse IP et les ports d'un nom d'hôte dans le fichier d'hôtes Windows?

Je souhaite spécifier des noms d'hôte avec deux ports différents dans le fichier Windows hosts.

Y a-t-il un moyen de le faire? Ou n'est-ce pas autorisé par Windows lui-même?

Je perds mon temps à chercher la solution depuis 8 heures.

Est-il possible de spécifier des ports dans le fichier hôte, hosts? Exemple: 127.0.0.1:80 et 127.0.0.1:9211

17
SIA

Vous ne pouvez pas associer un numéro de port à un nom d'hôte associé à une adresse IP dans le fichier hosts. Vous pouvez y parvenir avec Fiddler en utilisant FiddlerScript:

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
16
John T

Utilisez simplement des adresses IP sans ports. Exemple:

192.168.2.50  example.com

Ensuite, pour accéder à 192.168.2.50:5555 depuis votre navigateur (ou un autre programme):

http://example.com:5555/

(Le fichier hosts peut être trouvé à C:\Windows\System32\drivers\etc\hosts.)

14
devi
  • Le fichier hosts concerne uniquement la résolution du nom d'hôte.
  • Le navigateur , en l’absence de spécification directe du port: i.e. <hostname>:<port>, par défaut sur le port 80

Scénario de problème typique

  1. les applications définissent généralement leurs serveurs sur la même adresse IP par défaut 127.0.0.1 aka localhost (définie dans le fichier hosts) .
  2. pour éviter toute collision entre d’autres serveurs existants ou en cours d’exécution, l’application vous permet généralement de changer le port, mais pas l’adresse IP.

    2a. Si vous pouvez changer l'adresse IP du serveur en une autre dans l'espace d'adressage réservé en boucle127.0.0.0/8, alors vous ne tenterait probablement pas de définir des ports dans le fichier hosts.

Solution possible

Vous pouvez contourner ce problème en utilisant Windows inclus Outil de mise en réseau netsh en tant que proxy de port.


Vue d'ensemble

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

Actes

  • Démarrez votre serveur sur localhost:8081
  • Ajoutez le "DNS local" dans le fichier d'hôtes en tant que nouvelle ligne
    • 127.65.43.21 example.app
      • Toute adresse disponible dans le réseau 127.0.0.0/8 peut être utilisée.
      • Remarque: Je suppose que 127.65.43.21:80 n'est pas occupé par un autre service.
      • Vous pouvez vérifier avec netstat -a -n -p TCP | grep "LISTENING"
  • ajoutez la configuration réseau suivante avec commande netsh utilitaire
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Accédez au serveur à http://example.app

Notes:
- Ces modifications de commandes/fichier doivent être exécutées avec droits d'administrateur

- netsh portproxy a besoin des bibliothèques ipv6 même uniquement pour utiliser v4tov4. Généralement, ils seront également inclus par défaut. Sinon, installez-les en procédant comme suit: commande: netsh interface ipv6 install


Vous pouvez voir l'entrée que vous avez ajoutée avec la commande:

netsh interface portproxy show v4tov4

Vous pouvez supprimer l'entrée à l'aide de la commande suivante:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Liens vers des ressources:

Remarque: cette réponse est une duplication de ma réponse décrite dans cette question/réponse similaire sur stackoverflow.

5
Pau Coma Ramirez