Comment accéder à un site Web sur un serveur partagé par son adresse IP?

18

J'ai quelques questions, aidez-moi:

Premièrement, je peux accéder à la recherche Google en tapant simplement http://74.125.224.211, car il s'agit de l'adresse IP renvoyée par nslookup.

Cependant, je ne pouvais pas le faire avec les adresses IP renvoyées par www.yahoo.com. Comment accéder à la page de recherche Yahoo par son IP?

Un autre exemple, http://www.allaboutcircuits.comrésoudra 68.233.243.63par serveur DNS, mais si j'y vais http://68.233.243.63, j'obtiens "Bonjour tout le monde!".

Deuxièmement, pour une raison quelconque, il y a un problème avec les résolveurs DNS avec mon service d'hébergement Web (il ne sera pas résolu !!) . Donc, des commandes comme

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

reviendra php_network_getaddresses: getaddrinfo failed: Name or service not known

Comment contourner cela avec l'adresse IP,

68.233.243.63

Je veux dire, en quelque sorte attacher le paramètre de nom d'hôte HTTP à get_file_contents()?

Je voudrais résoudre ce problème de mon côté (dans mon code), aucun dépannage / ajustement ne sera effectué par l'administrateur du serveur.

user1502776
la source
9
Découvrez les serveurs virtuels et comment un seul hôte peut héberger de nombreux sites Web.
wallyk
Je suppose qu'il y a une raison pour laquelle vous ne pouvez pas simplement utiliser le nom de domaine?
Isaac Rabinovitch
@Isaac Rabinovitch: user1502776 dit "il y a quelque chose qui ne va pas avec les résolveurs DNS avec mon service d'hébergement Web (ce ne sera pas corrigé !!)" et "Je voudrais résoudre ce problème de mon côté (dans mon code), pas de dépannage / l'ajustement sera effectué par l'administrateur du serveur. "
Bavi_H
3
Si l'administrateur de votre serveur est aussi stupide, vous devez aller chercher un autre fournisseur d'hébergement Web.
Michael Hampton du

Réponses:

10

Comme l'a dit wallyk, ce sont des serveurs virtuels

Prenez cet exemple pour apache

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

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

Dans c: \ www \ example.com, créez un fichier d'index disant "Hello World! Example.com"

dans c: \ www \ example2.com, créez un fichier d'index indiquant "Hellow World! example2.com"

Et changez votre fichier d'hôtes en

127.0.0.1 example.com
127.0.0.1 example2.com

Ensuite, allez sur http://example.com puis allez sur http://example2.com

Voilà donc comment vous pouvez avoir plusieurs sites par IP unique

Donc, fondamentalement, la réponse est non, vous ne pourrez pas obtenir ce site à partir de l'ip.

Kris
la source
J'obtiens le point qui est IP seul ne suffit pas. Mais existe-t-il une commande PHP qui utilise l'IP et le nom d'hôte que je fournis pour récupérer des pages Web distantes? La commande ne doit pas interroger DNS.
user1502776
4
Bien que cela puisse être techniquement exact, cela ne résout pas la question. La question est de savoir comment demander un site spécifique avec un nom d'hôte connu à un serveur avec une IP connue, sans résoudre automatiquement l'adresse IP via DNS, à l'aide d'un script PHP. Il ne demande pas comment trouver un nom d'hôte correspondant à une IP donnée. Le commentaire de wallyk est plus pertinent, car son lien contient des informations sur l'en- Hosttête nécessaires à un serveur pour distinguer les sites Web qu'il héberge et servir le bon.
Bob
5

Vous dites que vous souhaitez spécifier manuellement le nom d'hôte et l'adresse IP, au lieu de compter sur un serveur DNS hors de votre contrôle. En regardant les commentaires de la documentation file_get_contents , je vois que les commentateurs ont résolu des problèmes similaires en créant un contexte qui contient l'en-tête Host: nécessaire. Quelque chose comme ça:

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

Bien sûr, sachez que l'inconvénient de spécifier manuellement le nom d'hôte et l'adresse IP est que si l'adresse IP change à l'avenir (par exemple, si le site passe à un nouveau fournisseur d'hébergement), votre code pourrait cesser de fonctionner jusqu'à ce que vous mettez à jour manuellement l'adresse IP.

Bavi_H
la source
2

L'adresse IP seule ne suffit pas pour identifier de manière unique le site auquel vous souhaitez vous rendre lorsque plusieurs hôtes virtuels s'exécutent sur le même port / serveur. Dans ce cas, vous devez spécifier l'en-tête Host dans la requête HTTP qui identifie le nom du serveur. Vous pouvez le faire directement via telnet sur le 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

où vous tapez la commande telnet et les lignes GET et Host, puis récupérez le code source HTML renvoyé par le serveur.

Ou vous pouvez utiliser curl où vous ajoutez spécifiquement l'en-tête (avec le -Hdrapeau).

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
dr jimbob
la source
1

Deuxièmement, pour une raison quelconque, il y a un problème avec les résolveurs DNS avec mon service d'hébergement Web (il ne sera pas résolu !!)

Vous pouvez utiliser un autre serveur DNS côté client, au cas où ce ne serait pas l'hôte Web - 8.8.8.8 et 8.8.8.6 sont gérés par Google, et 4.4.4.2 est un standby courant. Namebench vous permettra de trouver le plus rapide. Alternativement, vous pouvez utiliser un service proxy d'une certaine sorte (je lance le mien sur un VPS ou j'utilise Tor, mais il existe d'autres options).

Comme il s'agit de PHP, une option encore plus simple serait d'exécuter le code sur un autre système. Kludges ne sont pas maintenables.

Compagnon Geek
la source
sonne comme s'il était sur un hôte partagé et ne peut pas modifier le DNS, c'est pourquoi il a la mise en garde "Je voudrais résoudre ce problème de mon côté (dans mon code), aucun dépannage / ajustement ne sera fait par l'administrateur du serveur. " Je ne pense pas qu'il puisse modifier le DNS. . .
ernie
1
Il peut utiliser un autre serveur DNS côté client pour tester. Si son hébergeur ne configure pas correctement les vhosts, il a besoin d'un autre hébergeur.
Journeyman Geek