Używanie numeru portu w pliku hosta Windows


190

Po zainstalowaniu TeamViewer zmieniłem port wampserver na 8080, więc adres to http://localhost:8080.

W przypadku pliku hosta znajdującego się w folderze C: \ WINDOWS \ system32 \ drivers \ etc \ dokonałem również zmiany, jak poniżej

PRZED
127.0.0.1 www.example.com

PO
127.0.0.1:8080 www.example.com

Kiedy wchodzę na www.example.com, nie przekierowuję do mojego serwera wampirów, jak mogę to naprawić?


Potrzebujesz serwera NGNIX lub Apache HTTP jako serwera proxy do przekazywania żądań HTTP do odpowiedniej aplikacji -> która nasłuchuje na określonym porcie (lub zrób to za pomocą CNAME, który zapewnia firmę hostingową)
Musa


Może przejrzyj to i zmień zaakceptowaną odpowiedź na odpowiedź netsh? Skończyłem tutaj, próbując dowiedzieć się, jak mapować domeny .test do moich obrazów dokerów lokalnie w systemie Windows 10, a odpowiedź netsh działała jak urok!
Jereme

Pytanie brzmi: czy próbujesz przekierować cały host na pojedynczy port (?!) Czy tylko port 80 (tego hosta) na port 8080? Większość odpowiedzi tutaj dotyczy sposobu przekierowania (lub przynajmniej próby przekierowania ... ;-) port 80 hosta do portu 8080 twojego „localhost”. Przykład: https://www.example.commusisz przejść do portu 8080? lub do domyślnej 443? (tak jak powinno) Co oznacza: czy chcesz, aby https również był przekierowywany na port 8080 twojego lokalnego hosta? Czy w ogóle nie obchodzi Cię, gdzie zostanie to przekierowane?
ilias iliadis

Odpowiedzi:


195

hostsPlik jest tylko do rozpoznawania nazw hosta (na Windows, jak również na systemach uniksowych). Nie można tam podać numerów portów i nie ma możliwości robienia tego, co się chce z ogólną konfiguracją na poziomie systemu operacyjnego - przeglądarka wybiera port do wyboru.

Więc używaj zakładek lub czegoś podobnego.
(Niektóre programy zapory / routingu mogą zezwalać na przekierowanie portów wychodzących, ale tak naprawdę nie wydaje się to atrakcyjną opcją.)


6
jak korzystać z zakładek, czy możesz doprowadzić nas do linku lub dokumentacji lub samouczków na ten temat
adham dwikat

@Jereme: powinieneś powiedzieć OP, że nie mogę nic na to poradzić
Mat

1
@Mata Byłoby fajnie, prawda? Chcę tylko, żeby inni, którzy to widzą, wiedzieli, aby trochę przewinąć w dół i dać temu szansę. Skończyłem tutaj, próbując dowiedzieć się, jak mapować domeny .test do moich obrazów dokerów lokalnie w systemie Windows 10, a odpowiedź netsh działała jak urok!
Jereme

170

To, czego chcesz, można osiągnąć, modyfikując plik hosts za pomocą aplikacji Fiddler 2 .

Wykonaj następujące kroki:

  1. Zainstaluj Fiddler2

  2. Przejdź do menu Fiddler2: - Narzędzia > HOSTY .. (Kliknij, aby wybrać)

  3. Dodaj taką linię: -

    localhost:8080 www.mydomainname.com

  4. Zapisz plik, a następnie dokonaj płatności www.mydomainname.comw przeglądarce.


34
To złe rozwiązanie. Musisz mieć uruchomiony Fiddler przez cały czas.
James Huckabone

49
@JamesHuckabone: Czy masz lepsze rozwiązanie? chcielibyśmy to!
Rajat Gupta,

16
Gdy używam tej metody, pojawia się błąd 400 Błędne żądanie
Sam

3
to już nie działa. Wypróbowałem to zarówno z fiddler2, jak i fiddler4
basher

1
Na pewno @basher U nadal może napisać skrypt w Fiddler's Rules.js. Funkcjonalność hostów w Fiddler NIE jest plikami hostów Windows, to odtwarzanie tych nazw, aby ułatwić ich pracę. To jest jak Autorespondery, są tylko podzbiorem tego, co możesz zrobić bezpośrednio w skryptach. Jeśli nie możesz coś zrobić z menu, napisz to.
m3nda 16.04.16

159

Udało mi się to osiągnąć za pomocą narzędzia sieciowego dołączonego do systemu Windowsnetsh .

Jak zauważa Mat: plik hosts służy tylko do rozpoznawania nazw hostów, więc kombinacja tych dwóch sprawdziła się dla mnie.

Przykład


Przegląd

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

działania

  • Uruchomiłem mój serwer localhost:8081
  • Dodałem mój „lokalny DNS” w pliku hosts jako nowy wiersz
    • 127.65.43.21 example.app
      • Można użyć dowolnego bezpłatnego adresu w sieci 127.0.0.0/8( 127.x.x.x).
      • Uwaga: Zakładam, że127.65.43.21:80nie jest zajęty przez inną usługę.
      • Możesz to sprawdzić za pomocą netstat -a -n -p TCP | grep "LISTENING"
  • dodano następującą konfigurację sieci netsh narzędzia
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Teraz mogę uzyskać dostęp do serwera pod adresem http://example.app

Uwagi:
- Te polecenia / modyfikacje plików muszą być wykonywane z uprawnieniami administratora

- netsh portproxy potrzebuje bibliotek ipv6 nawet tylko do korzystania z v4tov4, zazwyczaj będą one również domyślnie dołączone, w przeciwnym razie zainstaluj je za pomocą następującego polecenia:netsh interface ipv6 install


Możesz zobaczyć wpis dodany za pomocą polecenia:

netsh interface portproxy show v4tov4

Możesz usunąć wpis za pomocą następującego polecenia:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Linki do zasobów:


To nie działa dla mnie. W pokazanym linku jest napisane: „Nie można również użyć adresu 127.0.0.1 jako adresu połączenia”.
Don Box

@DonBox: Jeśli podasz więcej szczegółów na temat konfiguracji, może mógłbym ci pomóc. Użycie 127.0.0.1 jako adresu połączenia jest zasadniczo wymaganiem w przedstawionym scenariuszu przypadku, ponieważ serwer uruchomił się na localhost , podobnie jak wiele innych programów. Jeśli możesz zacząć od innego adresu, nie potrzebujesz całego mechanizmu przekierowania portów, wystarczy zmodyfikować plik hosts ... Być może, tak jak tutaj szczegółowo opisano , nie masz zainstalowanego protokołu ipv6 : użyj następującego polecenia, aby zainstalować im:netsh interface ipv6 install
Pau Coma Ramirez

13
To powinna być zaakceptowana odpowiedź, ponieważ narzędzia są już zainstalowane w mojej podstawowej instalacji systemu Windows 10 i robi to dokładnie to, czego potrzebowałem. Zastanawiałem się nad zainstalowaniem apache i mod_proxy, ale jest to znacznie lepsze rozwiązanie.
Max Young

2
Nie działa dla mnie. Netsh wydaje się przekazywać adres, ale nie port.
steph643

2
Używam portera dokera. Używa localhost na porcie 9000. Modując powyższą komendę, używam portainer.local bez konieczności podawania portu na adres. Najpierw dodaję 127.0.0.1jako adres do dopasowania portainer.localw moim pliku hosts. Następnie uruchamiam: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 naciśnij klawisz Enter w cmd / powershell, aby go uruchomić. Następnie wyjdź z netsh, pisząc exit. Pisanie w przeglądarce http://portainer.localprowadzi mnie teraz tam, gdzie http://localhost:9000kiedyś przywykłem. To działało dla mnie jak urok.
EffectiX,

14

Fiddler2 -> Reguły -> Reguły niestandardowe

następnie znajdź funkcję OnBeforeRequest po umieszczeniu w następnym skrypcie na końcu:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

Rzeczywiście Fiddler jest o tyle potężniejszy, niż się spodziewa, aby nie uruchamiać serwera WWW na porcie 80, a nawet Skype ... W systemie Windows działa lepiej niż w Linuksie z Mono, przynajmniej funkcje przechwytywania, ponieważ Linux nie używa Inet z CLRL. Jest to lepszy sposób na robienie rzeczy na Fiddler, ponieważ można go eksportować z 1 plikiem.
m3nda 16.04.16

3

Najprostszym sposobem jest użycie Ergo jako zwrotnego serwera proxy: https://github.com/cristianoliveira/ergo

Ustawiasz swoje usługi i ich adres IP: PORT i ergo trasuje je dla Ciebie :).

Możesz to samo osiągnąć za pomocą nginxlub, apacheale musisz je skonfigurować.


4
Ergo wydaje się być projektem, nad którym pracowałeś (na podstawie nazwy użytkownika). W takim przypadku należy wyraźniej wskazać, że jesteś powiązany z tym produktem. Zobacz tę odpowiedź, a także inne odpowiedzi.
Frank Tan,

2

-Możesz użyć dowolnego darmowego adresu w sieci 127.0.0.0/8, w moim przypadku potrzebowałem tego dla kolby python i oto co zrobiłem: dodaj ten wiersz do pliku hosts (możesz znaleźć to Windows pod: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Upewnij się, że port jest domyślnym portem „80”. W moim przypadku jest to w kolbie python: app.run("127.0.0.5","80")

  • teraz uruchom swój kod i przeglądaj flask.dev


1

Jeśli dzieje się tak, że na lokalnym hoście działa inny serwer i chcesz nadać temu nowemu serwerowi inną lokalną nazwę hosta, taką jak http://teamviewer/

Myślę, że tak naprawdę szukasz funkcji Virtual Hosts. Używam Apache, więc nie wiem, w jaki sposób obsługują to inne demony internetowe. Może to się nazywa Alias. Oto dokumentacja Apache:

Przykłady Apache Virtual Hosts


1

Używanie netsh z connectaddress = 127.0.0.1 nie działało dla mnie.

Mimo, że szukałem wszędzie w Internecie, nie mogłem znaleźć rozwiązania, które rozwiązało to dla mnie, a mianowicie użyć connectaddress = 127.xxx (tj. Dowolnego adresu 127. ipv4, ale nie 127.0.0.1), ponieważ wydaje się, że łączy się z powrotem z localhost po prostu to samo, ale bez ograniczeń, dzięki czemu sprzężenie zwrotne działa w netsh.


Sugeruję usunięcie pierwszego i ostatniego akapitu. Po prostu powiedz, że istniejące rozwiązania nie działały, a znalazłeś inne. W przeciwnym razie twoja odpowiedź wygląda jak komentarz, więc ludzie mogą oznaczyć ją jako „nie odpowiedź” i zostanie usunięta.
StaceyGirl


0

Potrzebujesz serwera NGNIX lub Apache HTTP jako serwera proxy do przekazywania żądań HTTP do odpowiedniej aplikacji -> która nasłuchuje na określonym porcie (lub zrób to z CNAME, który zapewnia firmę hostingową). Jest to najmocniejsze rozwiązanie i jest to po prostu bardzo prosty sposób na ciągłe dodawanie nowych subdomen lub automatyczne dodawanie nowych domen, gdy rekordy DNS są skierowane na serwer.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.