Jak przejść do strony internetowej na serwerze współdzielonym według adresu IP?

18

Mam kilka pytań, proszę o pomoc:

Po pierwsze, mogę uzyskać dostęp do wyszukiwania Google po prostu przez wpisanie http://74.125.224.211, ponieważ jest to adres IP zwrócony przez nslookup.

Nie mogłem tego jednak zrobić z adresami IP zwróconymi z www.yahoo.com. Jak przejść do strony wyszukiwania Yahoo według adresu IP?

Kolejny przykład http://www.allaboutcircuits.comzostanie rozwiązany 68.233.243.63przez serwer DNS, ale jeśli przejdę do niego http://68.233.243.63, dostanę „Hello world!”.

Po drugie, z jakiegoś powodu coś jest nie tak z rozwiązaniami DNS w mojej usłudze hostingowej (nie zostanie to naprawione !!) . Więc polecenia jak

get_file_contents("http://www.allaboutcircuits.com");

wróci php_network_getaddresses: getaddrinfo failed: Name or service not known

Jak obejść ten problem za pomocą adresu IP,

68.233.243.63

Mam na myśli, jakoś dołączyć parametr nazwy hosta HTTP do get_file_contents()?

Chciałbym rozwiązać ten problem po mojej stronie (w moim kodzie), administrator serwera nie rozwiąże żadnych problemów.

użytkownik1502776
źródło
9
Przeczytaj o serwerach wirtualnych i o tym, jak jeden host może obsługiwać wiele witryn.
wallyk
Zakładam, że istnieje jakiś powód, dla którego nie możesz po prostu użyć nazwy domeny?
Isaac Rabinovitch
@Isaac Rabinovitch: użytkownik 1502776 mówi „coś jest nie tak z rozwiązaniami DNS w mojej usłudze hostingowej (nie zostanie to naprawione !!)” i „Chciałbym rozwiązać to po mojej stronie (w moim kodzie), brak rozwiązywania problemów / regulacja zostanie wykonana przez administratora serwera. ”
Bavi_H
3
Jeśli Twój administrator serwera jest tak głupi, musisz znaleźć innego dostawcę usług hostingowych.
Michael Hampton,

Odpowiedzi:

10

Jak powiedział wallyk, są to serwery wirtualne

Weź ten przykład dla apache

<VirtualHost *:80>
ServerName example2.com
DocumentRoot C:/www/example2.com
</VirtualHost>

<VirtualHost *:80>
ServerName example.com
DocumentRoot C:/www/example.com
</VirtualHost>

W folderze c: \ www \ example.com utwórz plik indeksu z napisem „Hello World! Example.com”

in c: \ www \ example2.com utwórz plik indeksu z napisem „Hellow World! example2.com”

I zmień plik hosts na

127.0.0.1 example.com
127.0.0.1 example2.com

Następnie idź do http://example.com, a następnie do strony http://example2.com

W ten sposób możesz mieć wiele witryn na jednym ip

Więc w zasadzie odpowiedź brzmi: nie, nie będziesz w stanie pobrać tej strony z ip.

Kris
źródło
Rozumiem, że samo IP nie wystarczy. Ale czy jest jakieś polecenie PHP, które używa adresu IP i nazwy hosta, które udostępniam do pobierania zdalnych stron internetowych? Polecenie nie powinno wysyłać zapytania do DNS
user1502776,
4
Chociaż może to być technicznie dokładne, nie rozwiązuje problemu. Pytanie brzmi: jak poprosić o określoną witrynę o znanej nazwie hosta z serwera o znanym adresie IP, bez automatycznego rozpoznawania adresu IP przez DNS, przy użyciu skryptu PHP. Nie pyta, jak znaleźć nazwę hosta odpowiadającą danemu adresowi IP. Komentarz wallyk jest bardziej odpowiedni, ponieważ jego link zawiera informacje na temat Hostnagłówka niezbędnego do tego, aby serwer mógł rozróżnić strony, które hostuje i podawać poprawne.
Bob
5

Mówisz, że chcesz ręcznie określić zarówno nazwę hosta, jak i adres IP, zamiast polegać na serwerze DNS poza Twoją kontrolą. Patrząc na komentarze w dokumentacji file_get_contents , widzę, że komentatorzy rozwiązali podobne problemy, tworząc kontekst zawierający potrzebny nagłówek Host:. Coś takiego:

$context = stream_context_create(array('http' => array('header' => 'Host: www.allaboutcircuits.com')));
$data = file_get_contents('http://68.233.243.63/', 0, $context);

Oczywiście należy pamiętać, że wadą ręcznego określania zarówno nazwy hosta, jak i adresu IP jest to, że jeśli adres IP zmieni się w przyszłości (na przykład, jeśli witryna zostanie przeniesiona do nowego dostawcy hostingu), kod może przestać działać do ręcznie aktualizujesz adres IP.

Bavi_H
źródło
2

Sam adres IP nie wystarczy, aby jednoznacznie zidentyfikować witrynę, do której chcesz przejść, gdy wiele wirtualnych hostów działa na tym samym porcie / serwerze. W takim przypadku musisz podać nagłówek hosta w żądaniu HTTP, który identyfikuje nazwę serwera. Możesz to zrobić bezpośrednio przez telnet na port 80:

$ telnet 68.233.243.63 80
Trying 68.233.243.63...
Connected to 68.233.243.63.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.allaboutcircuits.com

gdzie wpiszesz polecenie telnet oraz linie GET i Host, a następnie zwrócisz kod źródłowy HTML z serwera.

Lub możesz użyć curl, gdzie specjalnie dodajesz nagłówek (z -Hflagą).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
dr jimbob
źródło
1

Po drugie, z jakiegoś powodu coś jest nie tak z rozwiązaniami DNS w mojej usłudze hostingowej (nie zostanie to naprawione !!)

Możesz użyć innego serwera DNS po stronie klienta, na wypadek, gdyby nie był to host internetowy - 8.8.8.8 i 8.8.8.6 są obsługiwane przez Google, a 4.4.4.2 jest częstym trybem gotowości. Namebench pozwoli Ci znaleźć najszybszy. Alternatywnie, możesz użyć jakiejś usługi proxy (uruchamiam własną na VPS lub używam Tora, ale są inne opcje).

Ponieważ jest to PHP, jeszcze łatwiejszą opcją byłoby uruchomienie kodu w innym systemie. Kludges nie da się utrzymać.

Journeyman Geek
źródło
brzmi, jakby był na jakimś współużytkowanym hoście i nie może modyfikować DNS, dlatego ma zastrzeżenie „Chciałbym rozwiązać ten problem po mojej stronie (w moim kodzie), administrator serwera nie rozwiąże żadnych problemów / poprawek. „ Nie sądzę, żeby mógł zmodyfikować DNS. . .
ernie
1
Do testowania może użyć alternatywnego serwera DNS po stronie klienta. Jeśli jego host nie konfiguruje poprawnie vhostów, potrzebuje innego hosta.
Journeyman Geek