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

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Bolat
Сообщения: 100
Зарегистрирован: 03 ноя 2004, 08:13

20 июн 2005, 15:39

Как через 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>
Bolat
Сообщения: 100
Зарегистрирован: 03 ноя 2004, 08:13

20 июн 2005, 15:46

Упс
ща попробовал - вроде работает и по имени. Сорри всем.
Bolat
Сообщения: 100
Зарегистрирован: 03 ноя 2004, 08:13

21 июн 2005, 07: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
Сообщения: 309
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

21 июн 2005, 12:10

Ты получаешь обыкновенный HTTP файл. Так и парси его. В чем проблема - то?
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

21 июн 2005, 12: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
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

21 июн 2005, 12:12

UUU,
а что такое: "обыкновенный HTTP файл" ? :D
Bolat
Сообщения: 100
Зарегистрирован: 03 ноя 2004, 08:13

21 июн 2005, 12:19

UUU, Oscar,
Дело в том что я получаю инфу с разных whois серверов и у каждого инфа выдается по разному: разные заголовки, коментарии и т.д. Таких серверов в списке будет десятки. Писать для каждого автоматическое редактирование не выход.
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

21 июн 2005, 12:29

Bolat,
Любишь кататься - люби и катайся ))

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

ИМХО.
Bolat
Сообщения: 100
Зарегистрирован: 03 ноя 2004, 08:13

21 июн 2005, 12:56

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

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

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

Мне щас еще очень важно научится распознавать есвободно ли доменное имя или нет. Если здесь тоже надо парсить ответ для каждого сервака отдельно то это сакс.
UUU
Сообщения: 309
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

21 июн 2005, 13:20

Тяжело написать 2 парсера? Даже один, если парсить nic.ru/whois
Ответить