web-dev-qa-db-ja.com

IPアドレスで共有サーバー上のウェブサイトにアクセスするにはどうすればよいですか?

いくつか質問があります。助けてください:

まず、_http://74.125.224.211_と入力するだけでGoogle検索にアクセスできます。これはnslookupから返されるIPアドレスだからです。

しかし、www.yahoo.comから返されたIPアドレスではそうすることができませんでした。 IPでYahoo検索ページにアクセスするにはどうすればよいですか。

別の例として、_http://www.allaboutcircuits.com_はDNSサーバーによって_68.233.243.63_に解決されますが、_http://68.233.243.63_に移動すると、「Helloworld!」が表示されます。

第二に、何らかの理由で、私のWebホスティングサービスのDNSリゾルバーに問題があります(これは修正されません!!)。したがって、次のようなコマンド

_get_file_contents("http://www.allaboutcircuits.com");
_

_php_network_getaddresses: getaddrinfo failed: Name or service not known_が返されます

IPアドレスでこれを回避するにはどうすればよいですか?

_68.233.243.63
_

つまり、どういうわけかHTTPホスト名パラメーターをget_file_contents()にアタッチしますか?

これを自分の側で(私のコードで)解決したいのですが、サーバー管理者によるトラブルシューティング/調整は行われません。

18
user1502776

PHPスクリプトで、IPアドレスでアクセスする場合は、リクエストでHost:ヘッダーを正しいドメイン名で送信する必要もあります。

Stack Overflowに関するこの質問では、その方法について説明しています。 https://stackoverflow.com/questions/356705/how-to-send-a-header-using-a-http-request-through-a-curl -呼び出し

16
Grant

Wallykが言ったように、それは仮想サーバーです

Apacheのこの例を見てください

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

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

C:\ www\example.comで、「Hello World!example.com」というインデックスファイルを作成します。

c:\ www\example2.comで、「Hellow World!example2.com」というインデックスファイルを作成します。

そして、hostsファイルをに変更します

127.0.0.1 example.com
127.0.0.1 example2.com

次に、 http://example.com に移動し、次に http://example2.com に移動します。

つまり、単一のIPごとに複数のサイトを持つことができるのです。

つまり、基本的に答えは、IPからそのサイトを取得することはできないということです。

10
Kris

制御できないDNSサーバーに依存するのではなく、ホスト名とIPアドレスの両方を手動で指定したいとします。 file_get_contents documentation のコメントを見ると、必要なHost:ヘッダーを含むコンテキストを作成することで、同様の問題を解決したコメント投稿者がいます。このようなもの:

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

もちろん、ホスト名とIPアドレスの両方を手動で指定することの欠点は、IPアドレスが将来変更された場合(たとえば、サイトが新しいホスティングプロバイダーに移動した場合)、コードが機能しなくなる可能性があることに注意してください。 IPアドレスを手動で更新します。

5
Bavi_H

複数の仮想ホストが同じポート/サーバーで実行されている場合、IPアドレスだけでは、移動するサイトを一意に識別するのに十分ではありません。その場合、サーバー名を識別するHTTPリクエストでHostヘッダーを指定する必要があります。 Telnetを介してポート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

ここで、telnetコマンド、およびGET行とHost行を入力し、サーバーから返されたHTMLソースコードを取得します。

または、ヘッダーを具体的に追加するcurlを使用することもできます(-H 国旗)。

curl 68.233.243.63 -H "Host: www.allaboutcircuits.com"
2
dr jimbob

第二に、何らかの理由で、私のウェブホスティングサービスのDNSリゾルバーに何か問題があります(修正されません!!)

Webホストでない場合は、クライアント側で別のDNSサーバーを使用できます。8.8.8.8と8.8.8.6はGoogleによって実行され、4.4.4.2は一般的なスタンバイです。 Namebench 最速で検索できます。または、何らかのプロキシサービスを使用することもできます(私はVPSで独自に実行するか、Torを使用していますが、他のオプションがあります)。

これはPHPであるため、さらに簡単なオプションは、別のシステムでコードを実行することです。クラッジは維持できません。

1
Journeyman Geek