Jak połączyć się z tym hostem lokalnym z innego komputera w tej samej sieci?

171

Obecnie pracuję nad projektem i chciałbym przetestować go na dwóch laptopach w domu, gdzie jeden laptop łączy się z lokalnym hostem na drugim. Używam XAMPP. Jak mam to zrobic?

user1219572
źródło

Odpowiedzi:

283

To zdecydowanie możliwe. Weźmiemy tutaj ogólny przypadek z Apache.

Powiedzmy, że jesteś wielkim fanem Symfony2 i chciałbyś mieć dostęp do swojej strony symfony http://symfony.local/z 4 różnych komputerów (główny hostujący twoją stronę, a także Mac, Windows i dystrybucja Linuksa podłączona (bezprzewodowo lub nie) do główny komputer.

Szkic ogólny:

wprowadź opis obrazu tutaj


1 Skonfiguruj wirtualnego hosta :

Najpierw musisz skonfigurować wirtualnego hosta w httpd-vhosts.confpliku Apache . Na XAMP można znaleźć ten plik tutaj: C:\xampp\apache\conf\extra\httpd-vhosts.conf. Na MAMP , można znaleźć ten plik tutaj: Applications/MAMP/conf/apache/extra/httpd-vhosts.conf. Ten krok przygotowuje serwer sieci Web na komputerze do obsługi symfony.localżądań. Musisz podać nazwę hosta wirtualnego, a także folder główny / główny witryny. Aby to zrobić, dodaj następujący wiersz na końcu tego pliku. Musisz zmienić miejsce, w DocumentRootktórym znajduje się twój główny folder. Tutaj wziąłem /Applications/MAMP/htdocs/Symfony/jako katalog główny mojej witryny.

<VirtualHost *:80>
    DocumentRoot "/Applications/MAMP/htdocs/Symfony/"
    ServerName symfony.local
</VirtualHost>

2 Skonfiguruj swój plik hosts :

Aby klient (w tym przypadku Twoja przeglądarka) zrozumiał, co symfony.localtak naprawdę oznacza, musisz edytować plik hosts na swoim komputerze. Za każdym razem, gdy wpisujesz adres URL w przeglądarce, komputer próbuje zrozumieć, co to znaczy! symfony.localnic nie znaczy dla komputera. Więc spróbuje przekształcić nazwę symfony.localna adres IP. W tym celu najpierw zajrzy do pliku hosts na twoim komputerze, aby sprawdzić, czy może dopasować adres IP do tego, co wpisałeś w pasku adresu. Jeśli nie, to zapyta serwery DNS . Sztuczka polega na tym, aby dołączyć poniższe do pliku hosts.

  • W systemie MAC ten plik jest w /private/etc/hostsformacie;
  • W systemie LINUX ten plik jest w formacie/etc/hosts ;
  • W systemie WINDOWS ten plik jest w \Windows\system32\private\etc\hostsformacie;
  • W systemie WINDOWS 7 ten plik jest w \Windows\system32\drivers\etc\hostsformacie;
  • W systemie WINDOWS 10 ten plik jest w \Windows\system32\drivers\etc\hostsformacie;

Hosts file

##
# Host Database
# localhost is used to configure the loopback interface
##
#...
127.0.0.1           symfony.local

Od teraz za każdym razem, gdy napiszesz symfony.local na tym komputerze, twój komputer będzie używał interfejsu pętli zwrotnej do łączenia się z symfony.local. Zrozumie, że chcesz pracować na hoście lokalnym (127.0.0.1).

3 Dostęp symfony.localz innego komputera :

W końcu dochodzimy do głównego pytania, które brzmi:

Jak mogę teraz uzyskać dostęp do mojej witryny internetowej z innego komputera?

Teraz jest to łatwe! Musimy tylko powiedzieć innym komputerom, w jaki sposób mogą znaleźć symfony.local! Jak to robimy?

3a Uzyskaj adres IP komputera obsługującego witrynę :

Najpierw musimy znać adres IP na komputerze, na którym znajduje się strona internetowa (tym nad którym pracujemy od samego początku). W terminalu, na typach MAC i LINUXifconfig |grep inet , na WINDOWStyp ipconfig. Załóżmy, że adres IP tego komputera to 192.168.1.5 .

3b Edytuj plik hosts na komputerze, z którego próbujesz uzyskać dostęp do witryny internetowej. :

Ponownie w systemie MAC ten plik znajduje się w /private/etc/hosts; na LINUX , in /etc/hosts; i na WINDOWS , w \Windows\system32\private\etc\hosts(jeśli używasz WINDOWS 7 , ten plik jest w \Windows\system32\drivers\etc\hosts) .. Sztuczka polega teraz na użyciu adresu IP komputera, do którego próbujemy uzyskać dostęp / rozmawiać:

##
# Host Database
# localhost is used to configure the loopback interface
##
#...
192.168.1.5         symfony.local

4 Wreszcie ciesz się wynikami w przeglądarce

Możesz teraz wejść do przeglądarki i pisać, http://symfony.localaby pięknie zobaczyć swoją witrynę na różnych komputerach! Pamiętaj, że możesz zastosować tę samą strategię, jeśli jesteś użytkownikiem OSX, aby przetestować swoją witrynę internetową w Internet Explorerze za pośrednictwem Virtual Box (jeśli nie chcesz używać komputera z systemem Windows). Pięknie wyjaśniono to w artykule Tworzenie środowiska testowego Windows / IE na OSX .


Możesz także uzyskać dostęp do swojego hosta lokalnego z urządzeń mobilnych

Możesz się zastanawiać, jak uzyskać dostęp do witryny hosta lokalnego z urządzenia mobilnego. W niektórych przypadkach nie będziesz mógł modyfikować pliku hosts (iPhone, iPad ...) na swoim urządzeniu (z wyłączeniem jailbreakingu).

Cóż, rozwiązaniem jest wtedy zainstalowanie serwera proxy na komputerze obsługującym witrynę i połączenie się z tym serwerem proxy z iPhone'a. Właściwie jest to bardzo dobrze wyjaśnione w następujących postach i nie jest tak długo do skonfigurowania:

Na komputerze Mac polecam: Testowanie strony internetowej Mac OS X przy użyciu lokalnej nazwy hosta na urządzeniu mobilnym : Używanie SquidMan jako proxy. To w 100% darmowe rozwiązanie. Niektórzy ludzie mogą również używać Charlesa jako serwera proxy, ale kosztuje to 50 $.

W systemie Linux możesz dostosować system Mac OS powyżej, używając Squid jako serwera proxy.

W systemie Windows możesz to zrobić za pomocą programu Fiddler . Rozwiązanie opisano w poniższym poście: Monitorowanie ruchu iPhone'a za pomocą programu Fiddler


Edycja 23.11.2017: Hej, nie chcę modyfikować mojego pliku Hosts

@Dre. Czy jest jakikolwiek sposób na uzyskanie dostępu do witryny z innego komputera bez ręcznej edycji pliku hosta? powiedzmy, że chciałem uzyskać dostęp do witryny internetowej 100 komputerów

To interesujące pytanie, a ponieważ jest związane z pytaniem PO, pomogę.

Musiałbyś dokonać zmiany w swojej sieci, aby każdy komputer wiedział, gdzie znajduje się Twoja witryna. Większość zwykłych routerów tego nie robi, więc musiałbyś uruchomić własny serwer DNS w swojej sieci.

Załóżmy, że masz router (192.168.1.1). Ten router ma serwer DHCP i przydziela adresy IP 100 komputerom w sieci.

Powiedzmy, że masz, tak samo jak powyżej, w tej samej sieci komputer, na 192.168.1.5którym znajduje się Twoja witryna. Nazwiemy tę maszynę pompei.

$ echo $HOSTNAME
pompei

Tak samo jak przedtem, że maszyna pompeisię 192.168.1.5uruchamia serwer HTTP , który służy swoją stronę symfony.local.

Aby każda maszyna wiedziała, że symfony.localjest hostowana pompei, będziemy teraz potrzebować niestandardowego serwera DNS w sieci, który wie, gdzie symfony.localjest hostowany. Urządzenia w sieci będą wtedy mogły rozpoznawać nazwy domen obsługiwane pompeiwewnętrznie.

3 proste kroki.

Step 1: DNS Server

Skonfiguruj serwer DNS w swojej sieci. Załóżmy to pompeidla wygody i użyj czegoś takiego jak dnsmasq .

Dnsmasq zapewnia Domain Name System (DNS) spedytora , ... .

Chcemy pompeiuruchomić DNSmasq do obsługi żądań DNS Hey, pompei, where is symfony.locali odpowiadania Hey, sure think, it is on 192.168.1.5 but don't take my word for it.

Śmiało zainstaluj dnsmasq, plik konfiguracyjny dnsmasq jest zwykle w /etc/dnsmasq.confzależności od twojego środowiska.

Osobiście korzystam z no-resolvserwerów Google server=8.8.8.8 server=8.8.8.4.

* Uwaga: * ZAWSZE restartuj DNSmasq, jeśli modyfikujesz plik / etc / hosts, ponieważ w przeciwnym razie żadne zmiany nie przyniosą efektu.

Step 2: Firewall

Aby działało, pompeimusi zezwolić na przychodzące i wychodzące pakiety „domeny”, które przechodzą z i do portu 53. Oczywiście! Są to pakiety DNS i jeśli pompeiich nie zezwalają, nie ma możliwości, aby w ogóle dotrzeć do serwera DNS. Śmiało, otwórz ten port 53. W Linuksie użyłbyś iptablesdo tego klasycznie .

Dzielę się tym, co wymyśliłem, ale najprawdopodobniej będziesz musiał zagłębić się w zaporę ogniową i wszystko dobrze zrozumieć.

#
# Allow outbound DNS port 53
#
 iptables -A INPUT -p tcp --dport 53 -j ACCEPT
 iptables -A INPUT -p udp --dport 53 -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

 iptables -A INPUT -p udp --sport 53 -j ACCEPT
 iptables -A INPUT -p tcp --sport 53 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
 iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

Step 3: Router

Powiedz routerowi, że serwer DNS jest 192.168.1.5teraz włączony . W większości przypadków wystarczy zalogować się do routera i bardzo łatwo zmienić to ręcznie.

To wszystko, kiedy jesteś na komputerze i poprosisz o symfony.localto, zapyta serwer DNS, gdzie symfony.localjest hostowany, a gdy tylko otrzyma odpowiedź z serwera DNS, wyśle ​​odpowiednie żądanie HTTP do pompeiwłączenia 192.168.1.5.

Pozwoliłem ci się tym bawić i cieszyć się jazdą. Te 2 kroki to główne wytyczne, więc jeśli robisz to po raz pierwszy, będziesz musiał debugować i spędzić kilka godzin. Powiedzmy, że jest to nieco bardziej zaawansowana sieć, istnieje podstawowy serwer DNS, pomocniczy serwer DNS itp . Powodzenia!

Mick
źródło
Niezła odpowiedź. Śledziłem ostatnią część, aż doszedłem do „Monitorowania ruchu iPhone'a za pomocą Fiddlera”. Wskazuje na stronę główną Fiddlera. To powinien być link: conceptdev.blogspot.com/2009/01/ ...
helpse
Zmodyfikowałem plik hosta, ale problem polega na tym, że mam również uruchomiony serwer IIS, więc mój „localhost” lub „127.0.0.1” wskazuje na serwer IIS. Jak mogę go zastąpić serwerem Xamp?
Uzair Ali
1
@Mick jakikolwiek możliwy sposób uzyskania dostępu do witryny z innego komputera bez hostręcznej edycji pliku? powiedzmy, że chciałem uzyskać dostęp do strony internetowej 100 komputerów
Drenyl
1
@Dre Tak, musiałbyś dokonać zmiany w swojej sieci, aby każdy komputer wiedział, gdzie jest hostowana Twoja witryna. Dodałem info na końcu odpowiedzi. Mam nadzieję, że to pomoże.
Mick
1
Doskonałe wyjaśnienie!
Shepherd
25

Do testowania na obu laptopach w tej samej sieci bezprzewodowej i przez Internet możesz użyć usługi takiej jak http://localhost.run/ lub https://ngrok.com/

tommyvn
źródło
3
localhost.run działał jak czarujący. Mój serwer działał na porcie 8000 i właśnie zmienił linię poleceń z 80 na 8000.
Isuru Kwietnia
3
Łał! super ... to naprawdę działało na singlu ... dzięki @tommyvn
Jabongg
O wiele łatwiej jest skonfigurować NGROK niż zaktualizować lokalny plik hostów. +1
BlackHatSamurai
Proste rozwiązanie na szybki test
shamila
15

Pod warunkiem, że oba komputery znajdują się w tej samej grupie roboczej, otwórz cmd.exena komputerze, z którym chcesz się połączyć, wpisz ipconfigi zanotuj adres IP na IPv4 Addresslinii.

Następnie na komputerze, z którym chcesz się połączyć, użyj http:// + the IP of the target machine.

Że należy to zrobić.

Codrin Eugeniu
źródło
3
To zadziała, jeśli port 80 jest portem aplikacji (normalnie jest), ale pamiętaj, że możemy używać innego portu. To by oznaczało http: // + adres IP maszyny docelowej + ": PORT_NUMBER"
ggderas
To było proste rozwiązanie, którego szukałem. @Codrin Eugeniu: Rozważ uwzględnienie sugestii „: PORT_NUMBER” w swojej odpowiedzi, o czym wspomniał ggderas. Dla mnie było to potrzebne, ponieważ połączyłem się przez port 8088 za pomocą Apache Superset.
Ohumeronen
8

W systemie Mac OS X:

  1. W terminalu uruchom, ifconfig | grep 192.aby uzyskać wewnętrzny adres IP komputera w bieżącej sieci. To może być coś takiego192.168.1.140

  2. Uruchom serwer. Na przykład node server.jsmoże uruchomić serwer na jakimś porcie.

  3. W telefonie odwiedź 192.168.1.140:3000lub wybierz dowolny port, na którym działa serwer.

Raphael Rafatpanah
źródło
6

To narzędzie bardzo mnie uratowało, ponieważ nie mam uprawnień administratora na moim komputerze i mam już zainstalowany nodejs. Z jakiegoś powodu konfiguracja w mojej sieci nie daje mi dostępu do innych maszyn po prostu wskazując adres IP w przeglądarce.

# Using a local.dev vhost
$ browser-sync start --proxy

# Using a local.dev vhost with PORT
$ browser-sync start --proxy local.dev:8001

# Using a localhost address
$ browser-sync start --proxy localhost:8001

# Using a localhost address in a sub-dir
$ browser-sync start --proxy localhost:8080/site1

http://www.browsersync.io/docs/command-line/

Thiago C. S Ventura
źródło
Uruchomię aplikację internetową na localhost: 3000. Użyłem browser-sync start --proxy localhost:3000w osobnej powłoce. Na innym urządzeniu podłączonym do sieci piszę: ${computerIP}:3000ale nic nie widzę. Myślę, że powinienem zapewnić coś więcej.
Ben Carp,
5

może być tak, że zapory sieciowe uniemożliwiają dostęp do serwera WWW lokalnego hosta.
W razie potrzeby umieść adresy IP obu zabezpieczeń sieci antywirusowej zabezpieczeń internetowych jako bezpieczne adresy IP.
Jak znaleźć adres IP komputera z systemem Windows: Start> (Uruchom) wpisz: cmd (Enter)
(spowoduje to otwarcie wiersza poleceń w czarnej skrzynce)
wpisz ipconfig (Enter)
Powiedzmy, że Twój serwer WWW Apache lub IIS jest zainstalowany na twoim komputerze : 192.168.0.3
i chcesz mieć dostęp do swojego serwera WWW za pomocą laptopa. (IP laptopa to 192.168.0.5)
Na komputerze wpisujesz: http: // localhost / w przeglądarce Firefox lub Internet Eplorer, aby uzyskać dostęp do danych na serwerze sieciowym.
Na swoim laptopie wpisujesz http://192.168.0.3/, aby uzyskać dostęp do serwera internetowego na komputerze.

Aby wszystkie te rzeczy działały, musisz poprawnie zainstalować serwer sieciowy (np. IIS, Apache, XAMP, WAMP itp.).

Jeśli to nie zadziała, spróbuj
pingować swój komputer z laptopa: Otwórz polecenie propmt na swoim laptopie: Start> cmd (Enter)
ping 192.168.1.3 (Enter)
Jeśli pingowanie nie powiedzie się, oznacza to, że zapory sieciowe blokują połączenie lub sieć okablowanie jest uszkodzone. Uruchom ponownie modem lub przełącznik sieciowy i swoje komputery.
Zamknij programy, takie jak programy do rozmów, które używają twoich portów.
Możesz również wypróbować inny numer portu: http: 192.168.0.3: 80 lub http: 192.168.0.3: 81 lub dowolny numer losowy na końcu

KarlosFontana
źródło
1
Dziękuję tou @KarlosFontana - właśnie odpowiedziałeś na moje pytanie. Miałem problem z podłączeniem mojego iPhone'a do serwera, który napisałem na pulpicie. IPhone był podłączony do WiFi mojego komputera. Twoja ostatnia linijka odpowiedziała na moje pytanie :-)
Tommy
4

Jest to dodatkowa uwaga, jeśli po wykonaniu powyższego kroku nadal nie można uzyskać dostępu do hosta lokalnego z innych urządzeń. Może to być spowodowane tym, że apache ports.conf został skonfigurowany do obsługi lokalnie (127.0.0.1), a nie na zewnątrz.

sprawdź następujące kwestie (dla ubuntu apache2)

  $ cat /etc/apache2/ports.conf

jeśli ustawiono poniższe,

NameVirtualHost *:80  
Listen 127.0.0.1:80  

następnie zmień go z powrotem na wartość domyślną

NameVirtualHost *:80  
Listen 80  
rozpoznać
źródło
0

Jeśli korzystasz z systemu Windows, użyj ipconfig, aby uzyskać lokalny adres IPv4, a następnie określ go w pliku konfiguracyjnym Apache: httpd.conf , na przykład:

Listen: 10.20.30.40:80

Uruchom ponownie serwer Apache i przetestuj go z innego komputera w sieci.

shasi kanth
źródło