PDA

Просмотр полной версии : Функция fsockopen() для WHOIS



Bolat
20.06.2005, 14:39
Как через fsockopen() обратится к WHOIS серверу для того чтобы узнать занято ли доменное имя и если занято то узнать о нем подробную инфу.

Ниже скрипт который делает это по ip адрессу. А мне нужно чтобы делалось по доменному имени.


<html>
<head>
<title>IP information</title>
</head>
<body>
<center>
<FORM action='ripe.php' method=post>


[/i][/b]</font>


<INPUT type=text name=ip size=35>
<input type=submit value='Ââåäèòå IP-àäðåñ'>
</form>
</center>
<?

$ip = (isset($_REQUEST['ip'])) ? $_REQUEST['ip']:'';
if ($ip!='')
{
$sock = fsockopen ("whois.ripe.net", 43, $errno, $errstr);
if (!$sock)
{
echo("$errno($errstr)");
return;
}
else
{
fputs ($sock, $ip."\r\n");
while (!feof($sock))
{
echo (str_replace(":",":",
fgets ($sock,128))."
");
}
}
fclose ($sock);
}
?>
</body>
</html>

Bolat
20.06.2005, 14:46
Упс
ща попробовал - вроде работает и по имени. Сорри всем.

Bolat
21.06.2005, 06:34
Вот код по которому идет обращение к whois-серверу и получение всякой инфы и инфы о домене:


$server = 'WHOIS.VERISIGN-GRS.COM';
$target='reitarov';
if (! $sock = fsockopen($server, 43, $num, $error, 10)){
unset($sock);
$msg .= "Timed-out connecting to $server (port 43)";
}
else{
fputs($sock, "$target\n");
while (!feof($sock))
$Infa .= fgets($sock, 10240);
}
fclose($sock);

echo'<pre>'.$Infa.'</pre>';


Я не понимаю как полученную инфу редактить. Как например сделать так чтобы выводилась ТОЛЬКО инфа о домене. Или как модифицировать код чтобы получить ответ(TRUE или FALSE) о существовании домена.

UUU
21.06.2005, 11:10
Ты получаешь обыкновенный HTTP файл. Так и парси его. В чем проблема - то?

Oscar
21.06.2005, 11:11
Пример с http://www.php.net/manual/ru/function.fgets.php :


<?php
function getline( $fp, $delim )
{
$result = "";
while( !feof( $fp ) )
{
$tmp = fgetc( $fp );
if( $tmp == $delim )
return $result;
$result .= $tmp;
}
return $result;
}

// Example:
$fp = fopen("/path/to/file.ext", 'r');
while( !feof($fp) )
{
$str = getline($fp, "\n");
// Do something with $str
}
fclose($fp);
?>

Идёт чтение по строкам - и на месте "Do something with $str" можешь как угодно обрабатывать эту строку.

Это пример на локальном файле. но через сокеты идея такая же.

Oscar
21.06.2005, 11:12
UUU,
а что такое: "обыкновенный HTTP файл" ? :D

Bolat
21.06.2005, 11:19
UUU, Oscar,
Дело в том что я получаю инфу с разных whois серверов и у каждого инфа выдается по разному: разные заголовки, коментарии и т.д. Таких серверов в списке будет десятки. Писать для каждого автоматическое редактирование не выход.

Oscar
21.06.2005, 11:29
Bolat,
Любишь кататься - люби и катайся ))

Либо у разных серверов есть какие-то общие соглашения, следуя которым ты можешь обобщить свой парсинг,
либо тебе таки прийдётся писать парсер для каждого из серверов отдельно ..

ИМХО.

Bolat
21.06.2005, 11:56
Oscar

Либо у разных серверов есть какие-то общие соглашения, следуя которым ты можешь обобщить свой парсинг,
либо тебе таки прийдётся писать парсер для каждого из серверов отдельно ..
Такя я и думал.

Оказывается такое сделать нельзя, если только не парсить инфу с каждого сервера отдельно.
Вопрос снимается. Если конечно нет никаких гениаьных идей.

Мне щас еще очень важно научится распознавать есвободно ли доменное имя или нет. Если здесь тоже надо парсить ответ для каждого сервака отдельно то это сакс.

UUU
21.06.2005, 12:20
Тяжело написать 2 парсера? Даже один, если парсить nic.ru/whois

Bolat
22.06.2005, 07:03
UUU
2 не тяжело. Но парсить нетоко whois.nci.ru. Гораздо больше.

Bolat
27.06.2005, 11:35
Есть еще какаято phpшная вещь
system("whois $domen");
токо я так и не понял чо она делает....

Absurd
27.06.2005, 11:48
system("whois $domen");
токо я так и не понял чо она делает....
А ты на униксовом хостинге ее даёшь?

Bolat
27.06.2005, 13:10
Теперь да.
Сказал что функция отключена из за мер безопасности.
Надо включить...