Jak określić adres IP i porty dla nazwy hosta w pliku hosts Windows?

18

Chcę określić nazwy hosta z dwoma różnymi portami w hostspliku Windows .

Czy jest na to sposób? Czy też nie jest to dozwolone przez sam system Windows?

Przez ostatnie 8 godzin marnowałem czas na szukanie rozwiązania.

Czy można określić porty w pliku hosta hosts? Np .: 127.0.0.1:80i127.0.0.1:9211

Peter Mortensen
źródło
1
Plik HOSTS wiąże tylko nazwy z adresami IP, a nie adresy IP + porty. Sprawdź jednak witrynę superuser.com, opisując więcej szczegółów tego, co próbujesz zrobić (dotyczy to serwera WWW itp.), Ponieważ istnieje wiele sposobów uzyskania tego rodzaju mapowania, ale zawsze w zależności od specyfiki na dłoni.
Potrzebujesz serwera NGNIX lub Apache HTTP jako serwera proxy do przekazywania żądań HTTP do odpowiedniej aplikacji -> która nasłuchuje na określonym porcie
Musa

Odpowiedzi:

18

Po prostu użyj adresów IP bez portów. Przykład:

192.168.2.50  example.com

Następnie, aby uzyskać dostęp do 192.168.2.50:5555 z przeglądarki (lub innego programu):

http://example.com:5555/

hostsPlik można znaleźć na stronie:

Linux /etc/hosts

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

devi
źródło
Pomocne będzie dodanie zarówno ścieżki, jak i nazwy pliku do edycji.
nyedidikeke
@nyedidikeke dzięki za komentarz, naprawiłem to
devi
1
Czy możesz zaktualizować, podając przyczynę NIEokreślenia numeru portu podczas edycji pliku C:\Windows\System32\drivers\etc\hosts?
nyedidikeke
Jest to omówione w innych odpowiedziach.
Scott
17

Nie można powiązać numeru portu z nazwą hosta zamapowaną na adres IP w pliku hosts. Możesz to osiągnąć za pomocą Fiddler, używając FiddlerScript: 

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
John T.
źródło
7
Fajna sugestia dla użytkowników technologii. Aby to wyjaśnić, 1) Najpierw zainstaluj Fiddler 2) Następnie otwórz go i przejdź do menu reguł i wybierz opcję Dostosuj reguły (lub naciśnij Ctrl + R w systemie Windows). Spowoduje to otwarcie pliku JS w notatniku. 3) Znajdź funkcję statyczną OnBeforeRequest i wklej skrypt sugerowany przez @John do jej ciała. Również nazwa_hosta nie będzie działać, powinna to być nazwa_hosta. Mam nadzieję że to pomoże.
Riz
Czy znasz jakieś alternatywy typu open source (James, Owasp Zap lub inne), których można użyć do tego samego efektu?
Marc.2377,
5
  • hostsPlik jest tylko do rozpoznawania nazw hostów
  • Przeglądarka , w przypadku braku bezpośredniego wprowadzania portu IE <hostname>:<port>, domyślnie do portu80

Typowy scenariusz problemu

  1. aplikacje zwykle ustawiają swoje serwery na ten sam domyślny adres IP 127.0.0.1aka localhost (zdefiniowany w pliku hosts) .
  2. Aby uniknąć kolizji między ewentualnie innymi istniejącymi / działającymi serwerami, aplikacja zazwyczaj pozwala na zmianę portu, ale nie adresu IP.

    2a. Jeśli możesz zmienić adres IP serwera na inny w zarezerwowanej przestrzeni adresowej pętli zwrotnej 127.0.0.0/8 , prawdopodobnie nie będziesz próbował ustawić portów w pliku hosts.

Możliwe rozwiązanie

Można obejść ten problem za pomocą narzędzia sieciowego dołączonego do systemu Windowsnetsh jako proxy portu.


Przegląd

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

działania

  • Uruchom serwer na localhost:8081
  • Dodaj „lokalny DNS” do pliku hosts jako nowy wiersz
    • 127.65.43.21 example.app
      • 127.0.0.0/8Można użyć dowolnego bezpłatnego adresu w sieci .
      • 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"
  • dodaj następującą konfigurację sieci netsh polecenia narzędzia
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Uzyskaj 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:

Uwaga: ta odpowiedź jest duplikatem mojej odpowiedzi omówionej w tym podobnym pytaniu / odpowiedzi na temat przepełnienia stosu.

Pau Coma Ramirez
źródło