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

18

Je veux spécifier des noms d'hôtes avec deux ports différents dans le hostsfichier Windows .

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? Par exemple: 127.0.0.1:80et127.0.0.1:9211

Peter Mortensen
la source
1
Le fichier HOSTS associe uniquement les noms aux adresses IP, pas les adresses IP + port (s). Vérifiez cependant superuser.com en décrivant davantage les détails de ce que vous essayez de faire (est-ce pour un serveur Web, etc., etc.) car il existe de nombreuses façons d'obtenir ce type de mappage, mais toujours en fonction des détails à portée de main.
Vous avez besoin d'un serveur HTTP NGNIX ou Apache comme serveur proxy pour transmettre les requêtes http à l'application appropriée -> qui écoute un port particulier
Musa

Réponses:

18

Utilisez simplement des adresses IP sans ports. Exemple:

192.168.2.50  example.com

Ensuite, pour accéder à 192.168.2.50:5555 à partir de votre navigateur (ou d'un autre programme):

http://example.com:5555/

Le hostsfichier se trouve à:

Linux /etc/hosts

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

devi
la source
Il sera utile d'ajouter à la fois le chemin et le nom du fichier à modifier.
nyedidikeke
@nyedidikeke merci pour le commentaire, j'ai corrigé cela
devi
1
Pouvez-vous éventuellement mettre à jour avec la raison de NE PAS spécifier le numéro de port lors de la modification du fichier à C:\Windows\System32\drivers\etc\hosts?
nyedidikeke
C'est couvert dans les autres réponses.
Scott
17

Vous ne pouvez pas associer un numéro de port à un nom d'hôte mappé à une 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";
}
John T
la source
7
Belle suggestion pour les utilisateurs de technologie. Juste pour clarifier, 1) Installez d'abord Fiddler 2) Ensuite, ouvrez-le et allez dans le menu Règles et choisissez l'option Personnaliser les règles (ou appuyez sur Ctrl + R sur Windows). Cela ouvrira un fichier JS dans le bloc-notes. 3) Trouvez la fonction statique OnBeforeRequest et collez le script suggéré par @John dans son corps. De plus, HostNameIs ne fonctionnera pas, il devrait s'agir de HostnameIs. J'espère que cela t'aides.
Riz
Connaissez-vous une alternative open source (james, owasp zap ou autre) pouvant être utilisée dans le même sens?
Marc.2377
5
  • Le hostsfichier est uniquement destiné à la résolution du nom d'hôte
  • Le navigateur , en l'absence de spécification directe du port: à savoir <hostname>:<port>, par défaut au port80

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.1alias localhost (définie dans le fichier hosts) .
  2. pour éviter la collision entre d'autres serveurs existants ou en cours d'exécution, l'application vous permet généralement de modifier le port, mais pas l'adresse IP.

    2a. Si vous pouviez changer l'adresse IP des serveurs en une autre dans l' espace d'adressage réservé au bouclage 127.0.0.0/8 , alors vous n'essaieriez probablement pas de définir des ports dans le fichier hosts.

Solution possible

Vous pouvez contourner ce problème en utilisant l' outil de mise en réseau inclus Windowsnetsh comme proxy de port.


Aperçu

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

Actions

  • Démarrez votre serveur sur localhost:8081
  • Ajoutez le "DNS local" dans le fichier hosts en tant que nouvelle ligne
    • 127.65.43.21 example.app
      • Toute adresse libre du réseau 127.0.0.0/8peut être utilisée.
      • Remarque: je suppose qu'il127.65.43.21:80n'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 l' utilitaire de commande netsh
    • 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

Remarques:
- Ces commandes / modifications de fichiers doivent être exécutées avec les droits d'administrateur

- netsh portproxy a besoin des bibliothèques ipv6 même uniquement pour utiliser v4tov4, généralement elles seront également incluses par défaut, sinon installez-les en utilisant la commande suivante: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 avec la commande suivante:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Liens vers les ressources:

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

Pau Coma Ramirez
la source