2013-07-01 3 views
3

Я запустил сайт Minecraft, и в настоящее время при использовании протокола запроса он не может работать с SRV-записями.PHP Запрос записи SRV

Мне просто интересно, есть ли способ получить ip и порт, на которые указывает запись SRV.

E.g: mc.lunarphase.co.uk => 192.198.91.238:64759 
+0

Так в основном у вас есть имя хоста и нужно разрешить IP? Или вам нужно искать SRV-запись, а затем искать ip из возвращаемого имени хоста? –

+0

Мне просто нужно получить ip и порт из записи srv – Phyore

ответ

2

Самый простой способ, вероятно, использовать dig. Вы можете использовать сокеты непосредственно, но что-то, как это проще (ИМХО):

function getDNS($hostname, $type='') { 
     $records=`dig +noall +answer $hostname $type`; 
     $records=explode("\n",$records); 
     $res_hostname=''; 
     $port=0; 

     foreach ($records as $record) { 
       preg_match_all('/([^\s]+)\s*/',$record, $matches); 
       if (is_array($matches) && is_array($matches[1]) && count($matches[1]) > 3) { 
         switch (strtoupper($matches[1][3])) { 
         case 'SRV': 
           if (count($matches[1]) > 6) { 
             $port=$matches[1][6]; 
             $res_hostname=$matches[1][7]; 
           } 
           break; 
         case 'A': 
         case 'CNAME': 
           if (count($matches[1]) > 3) { 
             $res_hostname=$matches[1][4]; 
           } 
           break; 
         } 
         if (!empty($res_hostname) && substr($res_hostname, -1) == '.') break; // if it's a cname, we've probably already got the ip, so keep going just in case (but we might not so don't count on it!) 
       } 
     } 
     if (substr($res_hostname, -1) == '.') { // we have more resolving to do 
       $res_hostname=getDNS(trim($res_hostname, '. ')); 
     } 

     if (empty($res_hostname)) die('Failed to lookup IP for ' . (!empty($type) ? '(' . $type .' record) ' : '') . $hostname . PHP_EOL); 
     if (empty($port)) return $res_hostname; 
     return $res_hostname . ':' . $port; 
} 
$hostIPPair=getDNS('example.com', 'srv'); 
+1

Хм просто попробовал, и он ответил; Не удалось найти IP-адрес (запись srv) mc.lunarphase.co.uk – Phyore

+0

Правильной записью для вашего сервера было бы _minecraft._tcp.mc.lunarphase.co.uk; однако, я просто посмотрел, что запись srv и указывает на 192.198.91.238. Это неправильно (записи SRV не могут указывать на IPS, правильный способ сделать это - создать запись A, указывающую на этот ip на субдомене, а затем указать запись srv в указанный поддомен) Что я рекомендую добавлять запись A в mc. и указывая на этот IP, а затем указывая SRV на mc.lunarphase.co.uk. –

+0

Хост серверов сказал мне настроить его таким образом ~ Это способ записи SRV seyup для minecraft – Phyore

4

Вы можете использовать dns_get_record.

$result = dns_get_record("_http._tcp.mxtoolbox.com", DNS_SRV); 
print_r($result); 

, которая печатает:

Array 
(
    [0] => Array 
     (
      [host] => _http._tcp.mxtoolbox.com 
      [class] => IN 
      [ttl] => 2409 
      [type] => SRV 
      [pri] => 10 
      [weight] => 100 
      [port] => 80 
      [target] => mxtoolbox.com 
     ) 

) 
Смежные вопросы