用 PHP 查 DOMAIN 的 CNAME 紀錄

分類: 軟體測試 作者: suzy

27 八月 2009

接獲一項來自 Neo 的任務, "用PHP 實作由 CNAME 去判定新加入服務的 DOMAIN 為申請人所有" (證明他不是來亂的).

For Example:
Google Apps 就是用這個方式去作驗證

CNAME 是 DOMAIN or SUB DOMAIN 指向另一個 DOMAIN 的方式. (跟 alias 一樣)

那麼如果要用 PHP 實作呢? 有兩種方式 :
1. PHP5 內建的 dns_get_record() (Windows & BSD & Mac 不適用)
2. PEAR NET_DNS

NET_DNS 原理是用 fsockopen("你的 DNS SERVER IP", 53),
但是要先自己組合出 "封包的header data" 再丟過去, DNS Server 才會理你唷.
這些複雜的部份 NET_DNS 已經都幫我們做好了.

我們只要:

require_once('Net/DNS.php');
$ndr = new Net_DNS_Resolver();
$answer = $ndr->search("www.OOO.com", "CNAME");
echo "<pre>";
print_r($answer);
 
// 獲得的結果
Array
(
    [0] => Net_DNS_RR_CNAME Object
        (
            [name] => www.OOO.co.nz
            [type] => CNAME
            [class] => IN
            [ttl] => 86400
            [rdlength] => 18
            [rdata] => store	XXX�3
            [cname] => store.XXX.com
        )
 
)

PS, 在 Windows 環境, 請修改 PEAR/NET/DNS/Resolver.php 裡的

var $resolv_conf = '/etc/resolv.conf';

改成

var $resolv_conf = 'D:\Appserv\resolv.conf';

resolv.conf 要加入你的 DNS Server (請用 ipconfig /all 查詢)

nameserver 168.95.192.1

我要留言

關於這裡

這個部落格分享了哇寶在電子商務領域的技術及資訊,希望能讓更多人一起為台灣的網路產業加油。