Як перейти на веб-сайт на спільному сервері за його ip адресою?


18

У мене є кілька питань, будь ласка, допоможіть:

Кулаком, я можу отримати доступ до пошуку в Google, просто набравши текст http://74.125.224.211, оскільки це IP-адреса, повернута nslookup.

Однак я не зміг зробити це з IP-адресами, поверненими з www.yahoo.com. Як перейти на сторінку пошуку Yahoo за її IP?

Інший приклад http://www.allaboutcircuits.comбуде вирішено на 68.233.243.63сервері DNS, але якщо я перейду http://68.233.243.63, я отримаю "Hello world!".

По-друге, чомусь з 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()?

Я хотів би вирішити це самостійно (у своєму коді), адміністратор сервера не виконує усунення несправностей / коригування.


9
Прочитайте про віртуальні сервери та про те, як один хост здатний розміщувати багато веб-сайтів.
wallyk

Я припускаю, що є якась причина, що ви не можете просто використовувати доменне ім’я?
Ісаак Рабінович

@Isaac Rabinovitch: user1502776 каже: "Щось не так з DNS-рішеннями з моїм веб-хостинговим сервісом (це не буде виправлено !!)" і "я хотів би вирішити це самостійно (у своєму коді), без усунення несправностей / коригування буде здійснено адміністратором сервера. "
Bavi_H

3
Якщо ваш адміністратор сервера такий нерозумний, вам потрібно знайти іншого постачальника хостингу.
Майкл Хемптон

Відповіді:


16

У вашому PHP-скрипті, коли ви отримуєте доступ до нього за IP-адресою, вам також потрібно надіслати Host:заголовок у вашому запиті з правильним доменним іменем.

Це запитання щодо переповнення стека пояснює, як це зробити: https://stackoverflow.com/questions/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call


10

Як сказав Уоллік, це віртуальні сервери

Візьмемо цей приклад для апаша

<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"

І змініть файл хостів на

127.0.0.1 example.com
127.0.0.1 example2.com

Потім перейдіть на http://example.com і перейдіть на http://example2.com

Таким чином, ви можете мати кілька сайтів за один ip

Тому в основному відповідь така: ні, ви не зможете отримати цей сайт з ip.


Я розумію, що тільки IP-адреси недостатньо. Але чи є якась команда PHP, яка використовує IP та ім'я хоста, які я надаю для отримання віддалених веб-сторінок? Команда не повинна запитувати DNS.
user1502776

4
Хоча це може бути технічно точним, це питання не стосується. Питання полягає в тому, як запросити певний сайт із відомим іменем хоста від сервера з відомим IP, не автоматично вирішуючи IP-адресу через DNS, використовуючи скрипт PHP. Це не запитання, як знайти ім'я хоста, що відповідає даному IP. коментар wallyk є більш релевантним, оскільки його посилання містить інформацію про Hostзаголовок, необхідний серверу для розрізнення веб-сайтів, на яких він розміщує, та подання правильних.
Боб

5

Ви кажете, що хочете вручну вказати ім'я хоста та IP-адресу, замість того, щоб покладатися на DNS-сервер поза вашим контролем. Переглядаючи коментарі до документації file_get_contents , я бачу, що коментатори там вирішили подібні проблеми, створивши контекст, який містить необхідне заголовка 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-адресу.


2

Само по собі IP-адреси недостатньо, щоб однозначно визначити, на якому веб-сайті ви хочете перейти, коли на одному порту / сервері працює кілька віртуальних хостів. У такому випадку вам потрібно вказати заголовок хосту у запиті HTTP, який ідентифікує ім’я сервера. Це можна зробити безпосередньо через 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"

1

По-друге, чомусь у DNS-рішеннях з моїм сервісом веб-хостингу щось не так (це не буде виправлено !!)

Ви можете використовувати інший DNS-сервер на стороні клієнта, якщо це не веб-хост - 8.8.8.8 та 8.8.8.6 працює Google, а 4.4.4.2 - звичайний режим очікування. Namebench дозволить вам знайти найшвидший. Крім того, ви можете скористатися послугою проксі (я запускаю свій власний на VPS або використовую Tor, але є й інші варіанти).

Оскільки це PHP, ще простішим варіантом було б запуск коду в іншій системі. Злуки не піддаються ремонту.


звучить так, ніби він знаходиться на якомусь спільному хості, і не може змінювати DNS, тому він має застереження "Я хотів би вирішити це самостійно (у своєму коді), адміністратор сервера не виконує усунення несправностей / коригування. " Я не думаю, що він може змінити DNS. . .
ernie

1
Він може використовувати альтернативний сервер dns на стороні клієнта для тестування. Якщо його веб-хост неправильно налаштовує vhosts, йому потрібен інший веб-хост.
Подорожник Geek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.