Verwenden der Portnummer in der Windows-Hostdatei

189

Nach der Installation von TeamViewer habe ich den Wampserver-Port in 8080 geändert, daher lautet die Adresse http://localhost:8080.

Für die Hostdatei unter C: \ WINDOWS \ system32 \ drivers \ etc \ habe ich die folgenden Änderungen vorgenommen

VOR
127.0.0.1 www.example.com

NACH DEM
127.0.0.1:8080 www.example.com

Wenn ich auf www.example.com zugreife, wird es nicht zu meinem Wampserver umgeleitet. Wie kann ich das beheben?

Charles Yeung
quelle
Sie benötigen einen NGNIX- oder Apache-HTTP-Server als Proxyserver, um http-Anforderungen an die entsprechende Anwendung weiterzuleiten -> die einen bestimmten Port überwacht (oder mit CNAME, das die Hosting-Firma bereitstellt)
Musa
Vielleicht überprüfen Sie dies und wechseln Sie die akzeptierte Antwort zur Netsh-Antwort? Ich bin hier gelandet, als ich versucht habe, herauszufinden, wie .test-Domains meinen Docker-Images lokal unter Windows 10 zugeordnet werden können, und die Netsh-Antwort hat wie ein Zauber funktioniert!
Jereme
Die Frage ist: Versuchen Sie, einen ganzen Host auf einen einzelnen Port (?!) Oder nur den Port 80 (dieses Hosts) auf Port 8080 umzuleiten? Die meisten Antworten beziehen sich darauf, wie Sie umleiten (oder zumindest versuchen, umzuleiten ... ;-), Port 80 eines Hosts auf Port 8080 Ihres "localhost". Beispiel: https://www.example.commuss zu Port 8080 gehen? oder auf die Standardeinstellung 443? (wie es sollte) Was bedeutet: Möchten Sie, dass ein https auch an Port 8080 Ihres lokalen Hosts umgeleitet wird? Oder ist es Ihnen egal, wohin dies umgeleitet wird?
ilias iliadis

Antworten:

193

Die hostsDatei dient nur zur Auflösung von Hostnamen (sowohl unter Windows als auch auf Unix-ähnlichen Systemen). Sie können dort keine Portnummern eingeben, und es gibt keine Möglichkeit, mit der allgemeinen Konfiguration auf Betriebssystemebene das zu tun, was Sie möchten. Der Browser wählt den zu wählenden Port aus.

Verwenden Sie also Lesezeichen oder ähnliches.
(Einige Firewall- / Routing-Programme erlauben möglicherweise die Umleitung ausgehender Ports, aber das klingt nicht wirklich nach einer ansprechenden Option.)

Matte
quelle
6
Wie man Lesezeichen verwendet, können Sie uns zu einem Link oder einer Dokumentation oder Tutorials dazu führen
Adham Dwikat
@ Jereme: Sie sollten dem OP sagen, dass ich nichts dagegen tun kann
Mat
1
@Mat Das wäre schön, oder? Ich möchte nur, dass andere, die dies sehen, wissen, dass sie ein wenig nach unten scrollen und es versuchen. Ich bin hier gelandet, als ich versucht habe, herauszufinden, wie .test-Domains meinen Docker-Images lokal unter Windows 10 zugeordnet werden können, und die Netsh-Antwort hat wie ein Zauber funktioniert!
Jereme
169

Was Sie wollen, können Sie erreichen, indem Sie die Hosts-Datei über die Fiddler 2- Anwendung ändern .

Folge diesen Schritten:

  1. Installieren Sie Fiddler2

  2. Navigieren Sie zu Fiddler2 Menü: - Extras > HOSTS .. (wählen)

  3. Fügen Sie eine Zeile wie folgt hinzu: -

    localhost:8080 www.mydomainname.com

  4. Speichern Sie die Datei und checken Sie sie www.mydomainname.comim Browser aus.

Rajat Gupta
quelle
34
Dies ist eine schlechte Lösung. Fiddler muss immer laufen.
James Huckabone
48
@ JamesHuckabone: Hast du eine bessere Lösung? das würden wir lieben!
Rajat Gupta
16
Ich erhalte Fehler 400 Bad Request, wenn ich diese Methode verwende
Sam
3
das scheint nicht mehr zu funktionieren. Versuchte es mit sowohl fiddler2 als auch fiddler4
basher
1
@basher U kann es sicher immer noch bei Fiddler's Rules.js schreiben. Die Hosts-Funktionalität von Fiddler ist NICHT die Windows-Hosts-Datei, sondern eine Neuerstellung dieser Namen, um die Arbeit mit ihnen zu vereinfachen. Ist wie die Autoresponder, sind nur eine Teilmenge dessen, was Sie tun können, um es direkt zu skripten. Wenn Sie mit Menüs nichts anfangen können, schreiben Sie ein Skript.
m3nda
157

Dies gelang mir mit dem in Windows enthaltenen Netzwerk-Tool netsh.

Wie Mat betont: Die Hosts-Datei dient nur zur Auflösung von Hostnamen, daher hat eine Kombination aus beiden den Trick für mich getan.

Beispiel


Überblick

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

Aktionen

  • Startete meinen Server auf localhost:8081
  • Mein "lokales DNS" wurde in der Hosts-Datei als neue Zeile hinzugefügt
    • 127.65.43.21 example.app
      • Jede freie Adresse im Netzwerk 127.0.0.0/8( 127.x.x.x) kann verwendet werden.
      • Hinweis: Ich gehe davon aus, dass127.65.43.21:80kein anderer Dienst belegt ist.
      • Sie können mit überprüfen netstat -a -n -p TCP | grep "LISTENING"
  • Die folgende Netzwerkkonfiguration wurde mit dem Dienstprogramm netsh command hinzugefügt
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Ich kann jetzt auf den Server unter zugreifen http://example.app

Hinweise:
- Diese Befehle / Dateimodifikationen müssen mit Administratorrechten ausgeführt werden

- netsh portproxy benötigt IPv6-Bibliotheken auch nur, um v4tov4 zu verwenden. In der Regel werden sie auch standardmäßig enthalten, andernfalls installieren Sie sie mit dem folgenden Befehl:netsh interface ipv6 install


Sie können den Eintrag sehen, den Sie mit dem Befehl hinzugefügt haben:

netsh interface portproxy show v4tov4

Sie können den Eintrag mit dem folgenden Befehl entfernen :

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Links zu Ressourcen:

Pau Coma Ramirez
quelle
Das funktioniert bei mir nicht. In dem Link, den Sie angezeigt haben, steht "Außerdem können Sie 127.0.0.1 nicht als Verbindungsadresse verwenden.".
Don Box
@DonBox: Wenn Sie weitere Details zu Ihrem Setup angeben, könnte ich Ihnen vielleicht helfen. Die Verwendung von 127.0.0.1 als Verbindungsadresse ist im vorliegenden Fall grundsätzlich erforderlich, da der Server wie viele andere Programme standardmäßig bei localhost gestartet wurde . Wenn Sie an einer anderen Adresse beginnen können, benötigen Sie nicht den gesamten Portweiterleitungsmechanismus, sondern müssen nur die Hosts-Datei ändern ... Wie hier beschrieben , ist das IPv6-Protokoll möglicherweise nicht installiert: Verwenden Sie zum Installieren den folgenden Befehl sie:netsh interface ipv6 install
Pau Coma Ramirez
13
Dies sollte die akzeptierte Antwort sein, da die Tools bereits in meiner Windows 10-Basisinstallation installiert sind und genau das tun, was ich brauchte. Ich habe überlegt, Apache und mod_proxy zu installieren, aber dies ist eine viel bessere Lösung.
Max Young
1
Funktioniert bei mir nicht Netsh scheint die Adresse weiterzuleiten, aber nicht den Port.
steph643
2
Ich benutze Dockers Portainer. Es verwendet localhost an Port 9000. Wenn ich den obigen Befehl ändere, verwende ich portainer.local, ohne einen Port für die Adresse angeben zu müssen. Ich füge zuerst 127.0.0.1die Adresse hinzu, die portainer.localin meiner Hosts-Datei übereinstimmt . Dann netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 renne ich: Drücke die Eingabetaste in cmd / Powershell, um es auszuführen. Beenden Sie danach netsh durch Eingabe exit. Wenn http://portainer.localich im Browser tippe, komme ich jetzt dorthin, wo ich es http://localhost:9000früher getan habe. Das hat für mich wie ein Zauber gewirkt.
EffectiX
14

Fiddler2 -> Regeln -> Benutzerdefinierte Regeln

Suchen Sie dann die Funktion OnBeforeRequest, die am Ende im nächsten Skript eingefügt wird:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}
Sergey
quelle
In der Tat ist Fiddler so leistungsfähiger als erwartet, keinen Webserver auf Port 80 oder sogar Skype auszuführen ... Unter Windows funktioniert es besser als unter Linux mit Mono, zumindest mit den Erfassungsfunktionen, da Linux Inet von CLRL nicht verwendet. Dies ist eine schönere Möglichkeit, Dinge auf Fiddler zu erledigen, da es mit 1 Datei exportiert werden kann.
m3nda
3

Am einfachsten ist es, Ergo als Reverse-Proxy zu verwenden: https://github.com/cristianoliveira/ergo

Sie legen Ihre Dienste und deren IP: PORT fest und leiten sie für Sie weiter :).

Sie können dasselbe mit nginxoder erreichen apache, müssen sie jedoch konfigurieren.

Cristian Oliveira
quelle
3
Ergo scheint ein Projekt zu sein, an dem Sie gearbeitet haben (basierend auf dem Benutzernamen). In diesem Fall sollten Sie expliziter angeben, dass Sie mit diesem Produkt verbunden sind. Siehe diese Antwort sowie die anderen Antworten.
Frank Tan
2

-Sie können jede freie Adresse im Netzwerk 127.0.0.0/8 verwenden, in meinem Fall benötigt dies für Python Flask und das habe ich getan: Fügen Sie diese Zeile in die Hosts-Datei ein (Sie finden es Windows unter: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Stellen Sie sicher, dass der Port der Standardport "80" ist. In meinem Fall ist dies in der Python-Flasche der Fall: app.run("127.0.0.5","80")

  • Führen Sie nun Ihren Code aus und durchsuchen Sie ihn flask.dev

Belal Mohammed
quelle
1

Wenn ein anderer Server auf localhost ausgeführt wird und Sie diesem neuen Server einen anderen lokalen Hostnamen wie geben möchten http://teamviewer/

Ich denke, dass Sie tatsächlich nach Funktionen für virtuelle Hosts suchen. Ich benutze Apache, daher weiß ich nicht, wie andere Web-Daemons dies unterstützen. Vielleicht heißt es Alias. Hier ist die Apache-Dokumentation:

Beispiele für virtuelle Apache-Hosts

DogBot
quelle
1

Die Verwendung von netsh mit connectaddress = 127.0.0.1 hat bei mir nicht funktioniert.

Obwohl ich überall im Internet gesucht habe, konnte ich keine Lösung finden, die dies für mich löste, nämlich die Verwendung von connectaddress = 127.xxx (dh einer 127. IPv4-Adresse, nur nicht 127.0.0.1), da dies nur auf localhost zu verlinken scheint das gleiche aber ohne Einschränkung, so dass der Loopback in netsh funktioniert.

aards
quelle
Ich empfehle Ihnen, den ersten und den letzten Absatz zu entfernen. Sagen Sie einfach, dass vorhandene Lösungen nicht funktioniert haben und Sie eine andere gefunden haben. Andernfalls ähnelt Ihre Antwort einem Kommentar, sodass die Leute sie möglicherweise als "keine Antwort" kennzeichnen und sie entfernt wird.
StaceyGirl
0

Sie benötigen einen NGNIX- oder Apache-HTTP-Server als Proxyserver, um http-Anforderungen an die entsprechende Anwendung weiterzuleiten -> die einen bestimmten Port überwacht (oder mit CNAME, das die Hosting-Firma bereitstellt). Es ist die leistungsstärkste Lösung, und dies ist nur eine sehr einfache Möglichkeit, neue Subdomains hinzuzufügen oder neue Domains automatisch hinzuzufügen, wenn DNS-Einträge auf den Server verweisen.

Musa
quelle