Utilisation du numéro de port dans le fichier hôte Windows

191

Après avoir installé TeamViewer, j'ai changé le port wampserver en 8080, donc l'adresse est http://localhost:8080.

Pour le fichier hôte situé dans C: \ WINDOWS \ system32 \ drivers \ etc \, j'ai également effectué le changement comme ci-dessous

AVANT
127.0.0.1 www.example.com

APRÈS
127.0.0.1:8080 www.example.com

Lorsque j'accède à www.example.com, il ne redirige pas vers mon serveur wamp, comment puis-je le réparer?

Charles Yeung
la source
Vous avez besoin d'un serveur HTTP NGNIX ou Apache en tant que serveur proxy pour transmettre les requêtes http à l'application appropriée -> qui écoute un port particulier (ou faites-le avec CNAME qui fournit la société d'hébergement)
Musa
Peut-être revoir ceci et changer la réponse acceptée à la réponse netsh? Je me suis retrouvé ici en essayant de comprendre comment mapper les domaines .test à mes images docker localement sur Windows 10, et la réponse netsh a fonctionné comme un charme!
Jereme
La question est: essayez-vous de rediriger un hôte entier vers un seul port (?!) Ou juste le port 80 (de cet hôte) vers le port 8080? La plupart des réponses ici sont sur la façon de rediriger (ou au moins essayer de rediriger ... ;-) le port 80 d'un hôte vers le port 8080 de votre "localhost". Exemple: https://www.example.comdoit aller au port 8080? ou à la valeur par défaut 443? (comme il se doit) Ce qui signifie: voulez-vous qu'un https soit également redirigé vers le port 8080 de votre localhost? Ou vous ne vous souciez pas du tout de savoir où cela sera redirigé?
ilias iliadis

Réponses:

195

Le hostsfichier est uniquement destiné à la résolution du nom d'hôte (sur Windows ainsi que sur les systèmes de type Unix). Vous ne pouvez pas y mettre de numéros de port, et il n'y a aucun moyen de faire ce que vous voulez avec une configuration générique au niveau du système d'exploitation - le navigateur est ce qui sélectionne le port à choisir.

Alors utilisez des signets ou quelque chose comme ça.
(Certains logiciels de pare-feu / de routage peuvent autoriser la redirection de port sortant, mais cela ne semble pas vraiment être une option attrayante pour cela.)

Tapis
la source
6
comment utiliser les signets, pouvez-vous nous diriger vers un lien ou une documentation ou des tutoriels à ce sujet
adham dwikat
@Jereme: tu devrais dire ça à l'OP, je ne peux rien y faire
Mat
1
@Mat Ce serait bien, non? Je veux juste que les autres qui voient cela sachent faire défiler un peu vers le bas et essayer. Je me suis retrouvé ici en essayant de comprendre comment mapper les domaines .test à mes images docker localement sur Windows 10, et la réponse netsh a fonctionné comme un charme!
Jereme le
170

Ce que vous voulez peut être réalisé en modifiant le fichier hosts via l' application Fiddler 2 .

Suivez ces étapes:

  1. Installez Fiddler2

  2. Accédez au menu Fiddler2: - Outils > HÔTES .. (Cliquez pour sélectionner)

  3. Ajoutez une ligne comme celle-ci: -

    localhost:8080 www.mydomainname.com

  4. Enregistrez le fichier, puis procédez www.mydomainname.comau retrait dans le navigateur.

Rajat Gupta
la source
34
C'est une mauvaise solution. Vous devez avoir Fiddler en marche à tout moment.
James Huckabone
49
@JamesHuckabone: Avez-vous une meilleure solution? nous adorerions ça!
Rajat Gupta
16
J'obtiens l'erreur 400 Bad Request lorsque j'utilise cette méthode
Sam
3
cela ne semble plus fonctionner. Essayé avec fiddler2 et fiddler4
basher
1
@basher U peut toujours le script sur Fiddler's Rules.js à coup sûr. La fonctionnalité des hôtes sur Fiddler n'est PAS les fichiers hôtes Windows, c'est une recréation de ces noms pour les rendre plus faciles à utiliser. C'est comme les répondeurs automatiques, ne sont qu'un sous-ensemble de ce que vous pouvez faire en le scriptant directement. Si vous ne pouvez pas faire quelque chose avec les menus, créez un script.
m3nda
160

J'ai réussi à y parvenir en utilisant l' outil de mise en réseau Windows inclusnetsh .

Comme le fait remarquer Mat: Le fichier hosts est uniquement destiné à la résolution du nom d'hôte, donc une combinaison des deux a fait l'affaire pour moi.

Exemple


Aperçu

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

Actions

  • Démarré mon serveur sur localhost:8081
  • Ajout de mon "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/8( 127.x.x.x) peut ê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"
  • ajouté 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
  • Je peux maintenant accéder au serveur à http://example.app

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

- netsh portproxy a besoin de bibliothèques ipv6 même uniquement pour utiliser v4tov4, généralement elles seront également incluses par défaut, sinon installez-les à l'aide de 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:

Pau Coma Ramirez
la source
Cela ne fonctionne pas pour moi. Dans le lien que vous avez montré, il est dit "Vous ne pouvez pas non plus utiliser 127.0.0.1 comme adresse de connexion.".
Don Box
@DonBox: Si vous fournissez plus de détails sur votre configuration, je pourrais peut-être vous aider. L'utilisation de 127.0.0.1 comme adresse de connexion est fondamentalement la condition requise dans le scénario de cas présenté car le serveur a démarré sur localhost , comme le font par défaut de nombreux autres programmes. Si vous pouvez démarrer à une autre adresse, vous n'avez pas besoin de tout le mécanisme de redirection de port, il vous suffit de modifier le fichier hosts ... Peut-être, comme détaillé ici , vous n'avez pas installé le protocole ipv6 : utilisez la commande suivante pour installer eux:netsh interface ipv6 install
Pau Coma Ramirez
14
Cela devrait être la réponse acceptée car les outils sont déjà installés dans mon installation de base de Windows 10 et cela fait exactement ce dont j'avais besoin. J'envisageais d'installer apache et mod_proxy mais c'est une bien meilleure solution.
Max Young le
2
Ça ne marche pas pour moi. Netsh semble transmettre l'adresse, mais pas le port.
steph643
2
J'utilise le portainer de docker. Il utilise localhost sur le port 9000. En modifiant la commande ci-dessus, j'utilise portainer.local sans avoir à spécifier un port sur l'adresse. Je commence par ajouter 127.0.0.1comme adresse à faire correspondre portainer.localdans mon fichier d'hôtes. Ensuite, je lance: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 Appuyez sur la touche Entrée dans cmd / powershell pour l'exécuter. Après cela, quittez netsh en tapant exit. Dans le navigateur, le fait de taper http://portainer.localme ramène maintenant là où j'étais http://localhost:9000. Cela a fonctionné comme un charme pour moi.
EffectiX
14

Fiddler2 -> Règles -> Règles personnalisées

puis recherchez la fonction OnBeforeRequest lors de la mise dans le script suivant à la fin:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}
Sergey
la source
En effet Fiddler est tellement puissant que de ne pas faire fonctionner un serveur Web sur le port 80, ou même Skype ... Sous Windows fonctionne mieux que sous Linux avec Mono, du moins les fonctionnalités de capture, car Linux n'utilise pas Inet de CLRL. C'est une meilleure façon de faire les choses sur Fiddler, car il est exportable avec 1 fichier.
m3nda
3

Le moyen le plus simple consiste à utiliser Ergo comme proxy inverse: https://github.com/cristianoliveira/ergo

Vous définissez vos services et son IP: PORT et ergo l'achemine pour vous :).

Vous pouvez réaliser la même chose en utilisant nginxou apachemais vous devrez les configurer.

Cristian Oliveira
la source
4
Ergo semble être un projet sur lequel vous avez travaillé (basé sur le nom d'utilisateur). Si tel est le cas, vous devez indiquer plus explicitement que vous êtes affilié à ce produit. Voir cette réponse ainsi que les autres réponses.
Frank Tan
2

-Vous pouvez utiliser n'importe quelle adresse gratuite sur le réseau 127.0.0.0/8, dans mon cas, j'en avais besoin pour python flask et voici ce que j'ai fait: ajoutez cette ligne dans le fichier hosts (vous pouvez trouver que c'est windows sous: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Assurez-vous que le port est le port par défaut "80" dans mon cas, voici ce que dans le flacon python: app.run("127.0.0.5","80")

  • maintenant exécutez votre code et parcourez flask.dev

Belal Mohammed
la source
1

Si ce qui se passe, c'est que vous avez un autre serveur en cours d'exécution sur localhost et que vous souhaitez donner à ce nouveau serveur un nom d'hôte local différent comme http://teamviewer/

Je pense que ce que vous recherchez réellement, ce sont les fonctionnalités des hôtes virtuels. J'utilise Apache donc je ne sais pas comment les autres démons Web prennent en charge cela. Peut-être que cela s'appelle Alias. Voici la documentation Apache:

Exemples d'hôtes virtuels Apache

DogBot
la source
1

L'utilisation de netsh avec connectaddress = 127.0.0.1 n'a pas fonctionné pour moi.

Malgré la recherche partout sur Internet, je n'ai pas pu trouver la solution qui a résolu cela pour moi, qui consistait à utiliser connectaddress = 127.xxx (c'est-à-dire n'importe quelle adresse 127. ipv4, mais pas 127.0.0.1) car cela semble renvoyer à localhost juste le même mais sans la restriction, de sorte que le bouclage fonctionne dans netsh.

aards
la source
Je vous suggère de supprimer le premier et le dernier paragraphe. Dites simplement que les solutions existantes n'ont pas fonctionné et que vous en avez trouvé une autre. Sinon, votre réponse ressemble beaucoup à un commentaire, donc les gens pourraient la signaler comme "pas une réponse" et elle sera supprimée.
StaceyGirl
0

Vous avez besoin d'un serveur HTTP NGNIX ou Apache comme serveur proxy pour transférer les requêtes http vers l'application appropriée -> qui écoute un port particulier (ou faites-le avec CNAME qui fournit la société d'hébergement). C'est la solution la plus puissante et c'est juste un moyen très simple de continuer à ajouter de nouveaux sous-domaines ou d'ajouter automatiquement de nouveaux domaines lorsque les enregistrements DNS sont pointés vers le serveur.

Musa
la source