Wie gehe ich über die IP-Adresse zu einer Website auf einem freigegebenen Server?

18

Ich habe ein paar Fragen, bitte helfen Sie:

Ich kann auf die Google-Suche zugreifen, indem ich einfach tippe http://74.125.224.211, da dies die von nslookup zurückgegebene IP-Adresse ist.

Mit den von www.yahoo.com zurückgegebenen IP-Adressen konnte ich dies jedoch nicht tun. Wie gehe ich nach IP auf die Yahoo-Suchseite?

Ein anderes Beispiel http://www.allaboutcircuits.comwird nach 68.233.243.63DNS-Server aufgelöst, aber wenn ich gehe http://68.233.243.63, bekomme ich "Hallo Welt!".

Zweitens ist aus irgendeinem Grund etwas mit DNS-Resolvern bei meinem Webhosting-Dienst nicht in Ordnung (es wird nicht behoben !!) . Also Befehle wie

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

wird zurückkehren php_network_getaddresses: getaddrinfo failed: Name or service not known

Wie kann ich das mit der IP-Adresse umgehen?

68.233.243.63

Ich meine, irgendwie den HTTP-Hostnamen-Parameter anhängen get_file_contents()?

Ich möchte dies auf meiner eigenen Seite (in meinem Code) lösen. Der Serveradministrator wird keine Fehlerbehebung / Anpassung vornehmen.

user1502776
quelle
9
Lesen Sie mehr über virtuelle Server und wie ein einzelner Host viele Websites hosten kann.
Wallyk
Ich nehme an, es gibt einen Grund, warum Sie nicht einfach den Domainnamen verwenden können.
Isaac Rabinovitch
@Isaac Rabinovitch: user1502776 sagt, "mit meinem Webhosting-Dienst stimmt etwas mit DNS-Resolvern nicht (es wird nicht behoben !!)" und "ich möchte dies auf meiner eigenen Seite lösen (in meinem Code), keine Fehlerbehebung / Die Anpassung wird vom Serveradministrator vorgenommen. "
Bavi_H
3
Wenn Ihr Server-Administrator so dumm ist, müssen Sie einen anderen Webhosting-Anbieter suchen.
Michael Hampton

Antworten:

16

Wenn Sie in Ihrem PHP-Skript über eine IP-Adresse darauf zugreifen, müssen Sie Host:in Ihrer Anfrage auch einen Header mit dem richtigen Domainnamen senden .

Diese Frage zu Stack Overflow erklärt, wie es geht: /programming/356705/how-to-send-a-header- using-a-http-request-through-a-curl- call

Gewähren
quelle
10

Wie Wallyk sagte, handelt es sich um virtuelle Server

Nehmen Sie dieses Beispiel für Apache

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

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

In c: \ www \ example.com erstellen Sie eine Indexdatei mit der Aufschrift "Hello World! Example.com".

Erstellen Sie in c: \ www \ example2.com eine Indexdatei mit der Aufschrift "Hellow World! example2.com".

Und ändern Sie Ihre Hosts-Datei auf

127.0.0.1 example.com
127.0.0.1 example2.com

Gehen Sie dann zu http://example.com und dann zu http://example2.com

Auf diese Weise können Sie mehrere Websites pro IP-Adresse einrichten

Im Grunde genommen lautet die Antwort: Nein, Sie können diese Site nicht von der IP-Adresse abrufen.

Kris
quelle
Ich verstehe, dass IP allein nicht ausreicht. Aber gibt es einen PHP-Befehl, der IP und Hostnamen verwendet, die ich zum Abrufen entfernter Webseiten bereitstelle? Der Befehl sollte DNS nicht abfragen.
user1502776
4
Dies mag zwar technisch korrekt sein, geht jedoch nicht auf die Frage ein. Die Frage ist, wie eine bestimmte Site mit einem bekannten Hostnamen von einem Server mit einer bekannten IP angefordert werden kann, ohne die IP-Adresse mithilfe eines PHP-Skripts automatisch über DNS aufzulösen. Es wird nicht gefragt, wie ein Hostname gefunden werden soll, der einer bestimmten IP entspricht. Der Kommentar von wallyk ist relevanter, da sein Link Informationen zum HostHeader enthält, die ein Server benötigt, um zwischen den Websites, die er hostet, und den richtigen Websites zu unterscheiden.
Bob
5

Sie möchten sowohl den Hostnamen als auch die IP-Adresse manuell angeben, anstatt sich auf einen DNS-Server zu verlassen, auf den Sie keinen Einfluss haben. Wenn ich mir die Kommentare in der file_get_contents-Dokumentation ansehe , sehe ich, dass Kommentatoren dort ähnliche Probleme gelöst haben, indem sie einen Kontext erstellt haben, der den erforderlichen Host: -Header enthält. Etwas wie das:

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

Beachten Sie natürlich, dass der Nachteil der manuellen Angabe von Hostname und IP-Adresse darin besteht, dass Ihr Code möglicherweise nicht mehr funktioniert, wenn sich die IP-Adresse in der Zukunft ändert (z. B. wenn die Site zu einem neuen Hosting-Anbieter wechselt) Sie aktualisieren die IP-Adresse manuell.

Bavi_H
quelle
2

Die IP-Adresse allein reicht nicht aus, um eindeutig zu identifizieren, zu welcher Site Sie wechseln möchten, wenn mehrere virtuelle Hosts auf demselben Port / Server ausgeführt werden. In diesem Fall müssen Sie den Host-Header in der HTTP-Anforderung angeben, der den Servernamen identifiziert. Sie können dies direkt über Telnet an Port 80 tun:

$ 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

Hier geben Sie den Befehl telnet sowie die Zeilen GET und Host ein und rufen dann den vom Server zurückgegebenen HTML-Quellcode ab.

Oder Sie können Curl verwenden, um den Header (mit dem -HFlag) gezielt hinzuzufügen .

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
Dr. Jimbob
quelle
1

Zweitens ist aus irgendeinem Grund etwas mit DNS-Resolvern bei meinem Webhosting-Service nicht in Ordnung (es wird nicht behoben !!).

Sie können einen anderen DNS-Server auf der Client-Seite verwenden, falls es sich nicht um den Webhost handelt. 8.8.8.8 und 8.8.8.6 werden von Google ausgeführt, und 4.4.4.2 ist eine häufig verwendete Standby-Version. Mit Namebench finden Sie den schnellsten. Alternativ können Sie auch einen Proxy-Dienst verwenden (ich verwende meinen eigenen auf einem VPS oder verwende Tor, aber es gibt andere Möglichkeiten).

Da dies PHP ist, ist es noch einfacher, den Code auf einem anderen System auszuführen. Kludges sind nicht wartbar.

Geselle Geek
quelle
klingt, als ob er sich auf einem gemeinsam genutzten Host befindet und DNS nicht ändern kann, weshalb er den Vorbehalt hat "Ich möchte dies auf meiner eigenen Seite lösen (in meinem Code), der Serveradministrator wird keine Fehlerbehebung / Anpassung vornehmen. " Ich glaube nicht, dass er den DNS ändern kann. . .
Ernie
1
Er kann einen alternativen DNS-Server auf der Clientseite zum Testen verwenden. Wenn sein Webhost vhosts nicht richtig einrichtet, benötigt er einen anderen Webhost.
Geselle Geek