Bagaimana cara menuju ke situs web di server bersama dengan alamat ip-nya?

18

Saya punya beberapa pertanyaan, tolong bantu:

Fist, saya dapat mengakses pencarian Google hanya dengan mengetik http://74.125.224.211, karena ini adalah alamat IP yang dikembalikan oleh nslookup.

Namun, saya tidak bisa melakukannya dengan alamat IP yang dikembalikan dari www.yahoo.com. Bagaimana cara saya pergi ke halaman pencarian Yahoo dengan IP-nya?

Contoh lain, http://www.allaboutcircuits.comakan diselesaikan 68.233.243.63oleh server DNS, tetapi jika saya pergi ke http://68.233.243.63, saya mendapatkan "Halo dunia!".

Kedua, karena alasan tertentu, ada sesuatu yang salah dengan resolver DNS dengan layanan hosting web saya (tidak akan diperbaiki !!) . Jadi perintah suka

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

akan kembali php_network_getaddresses: getaddrinfo failed: Name or service not known

Bagaimana saya menyiasati ini dengan alamat IP,

68.233.243.63

Maksud saya, entah bagaimana lampirkan parameter nama host HTTP get_file_contents()?

Saya ingin menyelesaikan ini di pihak saya sendiri (dalam kode saya), tidak ada pemecahan masalah / penyesuaian yang akan dilakukan oleh admin server.

pengguna1502776
sumber
9
Baca tentang server virtual dan bagaimana satu host dapat meng-host banyak situs web.
wallyk
Saya berasumsi ada beberapa alasan Anda tidak bisa hanya menggunakan nama domain?
Isaac Rabinovitch
@Isaac Rabinovitch: user1502776 mengatakan "ada sesuatu yang salah dengan resolver DNS dengan layanan hosting web saya (itu tidak akan diperbaiki !!)" dan "Saya ingin menyelesaikan ini di pihak saya sendiri (dalam kode saya), tidak ada pemecahan masalah / penyesuaian akan dilakukan oleh admin server. "
Bavi_H
3
Jika admin server Anda sebodoh itu, Anda harus mencari penyedia hosting web yang berbeda.
Michael Hampton

Jawaban:

10

Seperti yang dikatakan wallyk, ini adalah server virtual

Ambil contoh ini untuk apache

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

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

Di c: \ www \ example.com buat file indeks yang mengatakan "Hello World! Example.com"

di c: \ www \ example2.com membuat file indeks yang mengatakan "Dunia Hellow! example2.com"

Dan ubah file host Anda menjadi

127.0.0.1 example.com
127.0.0.1 example2.com

Lalu pergi ke http://example.com lalu pergi ke http://example2.com

Jadi begitulah cara Anda dapat memiliki beberapa situs per ip tunggal

Jadi pada dasarnya jawabannya adalah, tidak, Anda tidak akan bisa mendapatkan situs itu dari ip.

Keris
sumber
Saya mendapatkan poin yaitu IP saja tidak cukup. Tetapi apakah ada perintah PHP yang menggunakan IP dan nama host yang saya berikan untuk mengambil halaman web jarak jauh? Perintah tidak boleh meminta DNS.
user1502776
4
Meskipun ini mungkin akurat secara teknis, itu tidak menjawab pertanyaan. Pertanyaannya adalah bertanya bagaimana cara meminta situs tertentu dengan nama host yang diketahui dari server dengan IP yang dikenal, tanpa secara otomatis menyelesaikan alamat IP melalui DNS, menggunakan skrip PHP. Tidak bertanya bagaimana menemukan nama host yang sesuai dengan IP yang diberikan. Komentar wallyk lebih relevan, karena tautannya mencakup informasi pada Hostheader yang diperlukan agar server dapat membedakan antara situs web yang dihostingnya dan melayani yang benar.
Bob
5

Anda mengatakan Anda ingin secara manual menentukan nama host dan alamat IP, alih-alih mengandalkan server DNS di luar kendali Anda. Melihat komentar di dokumentasi file_get_contents , saya melihat komentator di sana telah memecahkan masalah yang sama dengan menciptakan konteks yang berisi Host: header yang diperlukan. Sesuatu seperti ini:

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

Tentu saja, perlu diketahui bahwa kerugian untuk menentukan secara manual baik nama host dan alamat IP adalah bahwa jika alamat IP berubah di masa mendatang (misalnya, jika situs pindah ke penyedia hosting baru), kode Anda dapat berhenti berfungsi hingga Anda memperbarui alamat IP secara manual.

Bavi_H
sumber
2

Alamat IP saja tidak cukup untuk mengidentifikasi secara unik situs yang ingin Anda kunjungi ketika beberapa host virtual berjalan pada port / server yang sama. Dalam hal ini, Anda perlu menentukan header Host dalam permintaan HTTP yang mengidentifikasi nama server. Anda dapat melakukan ini secara langsung melalui telnet ke 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

tempat Anda mengetik perintah telnet, dan baris GET dan Host, lalu dapatkan kode sumber HTML kembali dari server.

Atau Anda dapat menggunakan ikal di mana Anda secara khusus menambahkan header (dengan -Hbendera).

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

Kedua, karena alasan tertentu, ada sesuatu yang salah dengan resolver DNS dengan layanan hosting web saya (tidak akan diperbaiki !!)

Anda bisa menggunakan server DNS lain di sisi klien, kalau-kalau itu bukan host web — 8.8.8.8 dan 8.8.8.6 dijalankan oleh Google, dan 4.4.4.2 adalah siaga umum. Namebench akan membiarkan Anda menemukan yang tercepat. Atau, Anda dapat menggunakan layanan proxy dari beberapa jenis (saya menjalankan sendiri pada VPS, atau menggunakan Tor, tetapi ada opsi lain).

Karena ini adalah PHP, opsi yang lebih mudah adalah menjalankan kode pada sistem lain. Kludges tidak bisa dirawat.

Journeyman Geek
sumber
sepertinya dia ada di beberapa host bersama, dan tidak dapat memodifikasi DNS, itulah sebabnya dia memiliki peringatan "Saya ingin menyelesaikan ini di pihak saya sendiri (dalam kode saya), tidak ada pemecahan masalah / penyesuaian yang akan dilakukan oleh admin server. " Saya tidak berpikir dia bisa memodifikasi DNS. . .
ernie
1
Dia dapat menggunakan server dns alternatif di sisi klien untuk menguji. Jika host webnya tidak mengatur vhosts dengan benar, ia membutuhkan host web lain.
Journeyman Geek