Dlaczego przekierowanie pliku hostów kończy się niepowodzeniem?

12

Próbuję przekierować google.com na moją lokalną maszynę dla zabawy i nauki z tym plikiem / etc / hosts na moim komputerze Mac.

127.0.0.1 www.google.com

Jednak www.google.com nadal odwzorowuje stronę główną Google, gdy odwiedzam ją w Chrome na komputerze Mac. Dlaczego?

Zasadniczo to wszystko, co zrobiłem:

  1. Wpisz sudo vim /etc/hoststerminal.
  2. Wprowadzone 127.0.0.1 www.google.comdo pliku hosts.
  3. Zapisano i zakończ vim.
David Faux
źródło

Odpowiedzi:

11

hostsPlik nie działa w ten sposób. Możesz go używać tylko do mapowania nazw hostów na adresy IP, a nie do localhost.

W twoim przypadku skorzystasz 127.0.0.1 www.google.com, np. Zamapuj www.google.com na 127.0.0.1.

Jeśli chcesz zmapować więcej nazw hostów na pojedyncze adresy IP, po prostu dodaj te nazwy hostów w tej samej linii, np 127.0.0.1 www.a.com www.b.com.

Renan
źródło
1
Dziękuję Ci. Właśnie zmieniłem plik / etc / hosts na moim komputerze Mac na 127.0.0.1 www.google.com. Jednak google.com nadal prowadzi do strony głównej Google. Czy muszę coś odświeżać? Czy powinienem ponownie uruchomić komputer?
David Faux
Nie powinieneś. Spróbuj dodać 127.0.0.1 google.com(bez www) po tym wierszu i sprawdź, czy to działa.
Renan
127.0.0.1 google.comteż nie działa. Nie jestem pewien, co się dzieje ... Wiem, że /etc/hoststo miękki link do /private/etc/hostsMaca, ale nie sądzę, żeby to w ogóle pomogło.
David Faux
1
Technicznie: hostsmapuje nazwy hostów na adresy IP, a nie odwrotnie.
Dennis
1
@Dennis, tak właśnie chciałem powiedzieć, ale z drugiej strony naprawdę działa to w obie strony, gdy się nad tym zastanowić, ponieważ tworzy powiązanie między dwoma elementami.
Synetech,
10

Przeglądarka internetowa nie jest najlepszym sposobem na sprawdzenie hostspoprawności składni. Spróbuj wykonać

ping www.google.com

i sprawdź, czy to pinguje 127.0.0.1.

Powodem, dla którego Chrome wydaje się ignorować hostsplik, jest buforowanie:

Jeśli Chrome ostatnio sprawdził adres IP (definicja terminu najprawdopodobniej zależy od czasu życia (TTL) zwróconego przez serwer DNS), pominie hostsplik, ponieważ zna już prawidłowy adres IP. Ma to na celu przyspieszenie przeglądania stron internetowych.

Aby Chrome uwzględnił nowy wpis, wykonaj następujące czynności:

  1. Edytuj /etc/hostszgodnie z opisem @Renan.

  2. Idź do chrome://chrome/settings/clearBrowserData.

  3. Wybierz since the beginning of time.

  4. Zaznacz Empty the cache, ale odznacz wszystko inne.

  5. Kliknij Clear browsing datai poczekaj na zakończenie.

  6. Uruchom ponownie Chrome.

Chrome powinien hoststeraz uszanować Twój plik.

Dennis
źródło
2
Nauczyłem się tego dawno temu z IE6. Gdybym dokonał zmiany w pliku HOSTS, gdy IE był jeszcze otwarty, musiałbym go specjalnie zamknąć i uruchomić ponownie, aby mógł pobrać zmiany. Dotyczy to większości programów. Niektóre programy (np. Wersje Chrome z ubiegłego roku lub dwóch) faktycznie okresowo ponownie odczytują plik HOSTS, więc jeśli wprowadzisz zmianę, poczekaj minutę lub dwie, a następnie odśwież (bez konieczności czyszczenia pamięci podręcznej). (Ta zasada ponownego czytania jest czasem przydatna, ale w rzeczywistości jest dość zła, ponieważ jest marnotrawstwem, a szczególnie źle, jeśli plik HOSTS jest duży.)
Synetech
@ Synetech: Chrome hostsnatychmiast rozpoznaje zmiany , o ile wpis nie jest nazwą hosta, która jest już buforowana. I zakładamy, że sprawdza hoststylko, czy TTL ma przeszłość. W przypadku dużych witryn może to chwilę potrwać.
Dennis
Nie znam szczegółów na temat tego, jak różne wersje zajmują się ponownym odczytaniem pliku HOSTS, ale możesz użyć Filemon / ProcMon, aby zobaczyć go w akcji; chrome.exeod czasu do czasu przeczyta cały plik.
Synetech,
2
Jest mniej brutalny sposób na opróżnianie pamięci podręcznej DNS chrome superuser.com/questions/203674/…
hakunin
@hakunin: Neat. W przypadku Chromium 25.0.1364.160 Ubuntu 12.04 nie jest to już nawet konieczne. Zalogowałem się net-internals/#dns, a pamięć podręczna hosta zostanie automatycznie wyczyszczona po /etc/hostszmianie.
Dennis
1

Moja odpowiedź jest kombinacją powyższych, ponieważ łączę się z moim biurem za pośrednictwem Fortinet SSL VPN dla systemu Ubuntu 16.04.

Pierwszą rzeczą, którą musiałem zrobić, to uruchomić konsolę terminali i uruchomić następującą komendę:

sudo nano /etc/resolvconf/resolv.conf.d/base

Dodałem następujący przykład:

searchdomain domain.local
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

Następnie zapisałem plik, naciskając CTRL-Oi zamknąłem nano, naciskając CTRL-X.

Następnie wykonałem następujące czynności i wszystko działało idealnie:

Aby Chrome uwzględnił nowy wpis, wykonaj następujące czynności:

Edytuj /etc/hostszgodnie z opisem @Renan.

  1. Idź do chrome://chrome/settings/clearBrowserData.
  2. Wybierz od początku czasu.
  3. Zaznacz Opróżnij pamięć podręczną, ale odznacz wszystko inne.
  4. Kliknij Wyczyść dane przeglądarki i poczekaj na zakończenie.
  5. Uruchom ponownie Chrome.

Chrome powinien teraz uszanować plik hosts.

użytkownik712460
źródło