Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Существует ли адрес?


Автор: Gold Dragon 6.12.2004, 16:16
Можно ли проверить средствами РНР существует ли введённый адрес или нет, т.е. юзер вводит адрес, а мне нужно проверить не левый ли он.

Автор: Secandr 6.12.2004, 16:17
адрес чего?

Автор: Gold Dragon 6.12.2004, 16:44
Например: http://forum.vingrad.ru и http://forumm.vingradd.ru


Автор: Opik 6.12.2004, 17:00
Код

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if ($fp) {
  echo "есть такой";
}

Автор: Secandr 6.12.2004, 17:01
Opr Если сокеты на сервере поддерживаются.

Автор: Opik 6.12.2004, 17:05
Secandr
таких "если" можно составить тысячи, есть множество вариантов проверки, я должен писать каждый?)

Автор: Mal Hack 6.12.2004, 18:00
Вариант: gethostbyaddr(); если не найдет - вернет пустую строку.

Автор: penizillin 6.12.2004, 20:05
Opr: если есть поддержка сокетов, то следует добавить в ваш код запрос HEAD и проанализировать ответ. потому что одного connect'а часто не хватает, приходится выфильтровывать все ответы на 3*и 5*.

Автор: Gold Dragon 7.12.2004, 09:24
Цитата(Mal @ 6.12.2004, 18:00)
Вариант: gethostbyaddr(); если не найдет - вернет пустую строку
Можно чуть подробне о функции

Автор: Opik 7.12.2004, 12:58
http://ee.php.net/gethostbyaddr

Автор: Gold Dragon 7.12.2004, 13:34
очень интересные функции gethostbyname() и gethostbyaddr()

Только если такого адреса нет, возвращается не пустая строка, а то что было передано. И кажется он не совсем верно работает и доменами 3 уровня..

Автор: Mal Hack 7.12.2004, 15:16
Цитата
Только если такого адреса нет, возвращается не пустая строка, а то что было передано. И кажется он не совсем верно работает и доменами 3 уровня..

Для gethostbyname().. Если найдет - вернет IP адрес, если нет - переданное в качестве параметра имя хоста. С доменами 3 уровня работает замечательно.
gethostbyaddr работает с IP, но сам понимаешь, на одном айпи могут быть несколько доменов. Если же на этом IP один сайт, то по вернет имя хоста.
Я там выше описался малость, вместо addr надо name...

Автор: Gold Dragon 7.12.2004, 15:30
Цитата(Mal @ 7.12.2004, 15:16)
С доменами 3 уровня работает замечательно.
Я вот что имел ввиду: допустим адрес vodka.h11.ru - всё есть (195.161.118.105), но если ввести vodkaaaa.h11.ru (195.161.118.105) - адреса то нет, только переход осуществляется на страницы хостинга. Это наверное не исправить..

Автор: Mal Hack 7.12.2004, 15:32
Да, это не исправить, поскльку пользователю тебе тобишь обратно не возвращается 404, а сервер сам ее обрабатывает и перекидывает на сайт хостинга, и возвращает тебе 200...

Автор: IZ@TOP 9.12.2004, 18:49
Вариант: писать запрос через сокет к сайту, нет коннекта (сайт нечуществует либо недоступен), есть коннект - проверяем небыло ли редиректа, был - сайт баним.

Автор: Gold Dragon 10.12.2004, 13:05
IZ@TOP
А не поможешь кодом ;)

Автор: IZ@TOP 10.12.2004, 13:21
Это к знакотам HTTP спецификации. Я могу только напрвить в нужное русло.

Автор: penizillin 10.12.2004, 15:14
мое сообщение было для вас не достаточно понятным?

Автор: Gold Dragon 10.12.2004, 15:23
Цитата(penizillin @ 10.12.2004, 15:14)
мое сообщение было для вас не достаточно понятным?
не очень (для меня)

Автор: penizillin 10.12.2004, 15:26
что именно:

[ ] sockets
[ ] HEAD / GET
[ ] 3* / 5*

(поставить крестик)

Автор: Наставник 10.12.2004, 15:57
А вот тебе мой совет..
Для корректного распознавания адреса лучше использовать следующий метод.


Код

$ip="192.168.1.1";
$domain_name=gethostbyaddr($ip);
// к примеру человек настроил свой компьютер, чтобы доменное имя возвращалось www.yandex.ru

$domain_name=$ip
if($domain_name==$ip) die("Uncorrect IP!");

$ip2=gethostbyaddr($domain_name);
// обращаемся к www.yandex.ru, и получаем совсем другой ip

if($ip2===$domain_name) die ("Uncorrect domain name");

if($ip===$ip2) echo "$ip=>$domain_name";
// проверяем и видим что произошла банальная подмена ip
else "по адресу $ip находится хакер!!!";




Автор: Opik 10.12.2004, 16:05
Цитата
if($domain_name==$ip) die("Uncorrect IP!");

Не факт. Есть и адреса без домена и на них попадать при помощи ипа надо.

Автор: Наставник 10.12.2004, 16:11
Цитата(Opr @ 10.12.2004, 16:05)
Цитата
if($domain_name==$ip) die("Uncorrect IP!");


Не факт. Есть и адреса без домена и на них попадать при помощи ипа надо.


Согласен, в этом случае... надо просто проверить ip...

Автор: Opik 12.12.2004, 19:34
Цитата(IZ @ 9.12.2004, 18:49)
Вариант: писать запрос через сокет к сайту, нет коннекта (сайт нечуществует либо недоступен), есть коннект - проверяем небыло ли редиректа, был - сайт баним.

Тоже не подходит, у меня например сайт:
www.opik.ru и сразу кидает на www.opik.ru/portal

Автор: IZ@TOP 13.12.2004, 14:24
Цитата(Opr @ 12.12.2004, 20:34)
Тоже не подходит, у меня например сайт:
www.opik.ru и сразу кидает на www.opik.ru/portal

Так лучше не делать, этоже делает индексацию поискавиками хуже.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)