Страница 1 из 2

Функция fsockopen() для WHOIS

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

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

Код: Выделить всё

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


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


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

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

Добавлено: 20 июн 2005, 15:46
Bolat
Упс
ща попробовал - вроде работает и по имени. Сорри всем.

Добавлено: 21 июн 2005, 07:34
Bolat
Вот код по которому идет обращение к 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) о существовании домена.

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

Добавлено: 21 июн 2005, 12:11
Oscar
Пример с 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" можешь как угодно обрабатывать эту строку.

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

Добавлено: 21 июн 2005, 12:12
Oscar
UUU,
а что такое: "обыкновенный HTTP файл" ? :D

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

Добавлено: 21 июн 2005, 12:29
Oscar
Bolat,
Любишь кататься - люби и катайся ))

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

ИМХО.

Добавлено: 21 июн 2005, 12:56
Bolat
Oscar
Либо у разных серверов есть какие-то общие соглашения, следуя которым ты можешь обобщить свой парсинг,
либо тебе таки прийдётся писать парсер для каждого из серверов отдельно ..

Такя я и думал.

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

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

Добавлено: 21 июн 2005, 13:20
UUU
Тяжело написать 2 парсера? Даже один, если парсить nic.ru/whois