2013-07-01 107 views
3

我運行一個Minecraft網站,當前使用查詢協議時,它無法使用SRV記錄。PHP查詢SRV記錄

我只是想知道有沒有辦法讓SRV記錄指向的IP和端口。

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

所以基本上你的主機名和需要解決的IP?或者您需要查找SRV記錄,然後從返回的主機名查找IP? –

+0

我只需要從srv記錄中獲取IP和端口 – 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;正確的方法是創建一個指向該子域上的IP的A記錄,然後將該SRV記錄指向該子域) 我會推薦添加mc的A記錄。並將其指向該IP,然後將SRV指向mc.lunarphase.co.uk。 –

+0

服務器主機告訴我這樣設置〜這就是SRV記錄爲我的世界seyup的方式 – 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 
     ) 

)