掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
最近想給微構(gòu)網(wǎng)絡(luò)網(wǎng)站巡查系統(tǒng)增加一個小功能,就是域名狀態(tài)提醒,主要需要實時獲取指定域名的狀態(tài)和到期時間,本質(zhì)上就是域名的whois信息。域名的whois的信息隨便在網(wǎng)上一查就能查到,尤其是那些域名注冊商其實都提供了這么一個功能。
然而很少平臺提供查詢接口,因為需要實時查詢,因此在第三方網(wǎng)頁上的查詢結(jié)果不可以直接用于我們需要的數(shù)據(jù),當(dāng)然也可以通過爬取抓取的方式,但這種方式嚴(yán)格來講是不合規(guī)的。首先想到的是在各大API平臺搜索,結(jié)果主流API開放平臺幾乎都提供域名whois查詢接口。但是,但是收費貌似不便宜,每次查詢要小幾分錢,別小看這個幾分錢,因為我們需要獲取的是實時的數(shù)據(jù),因此查詢量是非常大的,這么相比起來其實還是需要一點成本的。比如下圖就是阿里云云市場某服務(wù)商的whois查詢接口:
作為開發(fā)者,雖然很多時候不想重復(fù)造輪子,然而我們還是決定自己造一個這樣的輪子。理由很簡單,我們的經(jīng)驗告訴我們,實現(xiàn)這個需求工作量應(yīng)該不是很大,而且自己弄的東西就是感覺香。其實獲取域名的whois信息,流程是非常簡單的。直接貼出核心代碼:
$socket = @fsockopen($whois_server, 43); fputs($socket, "{$domain}\r\n"); $response = ''; while (!feof($socket)) { $response .= fgets($socket, 128); } fclose($socket);
沒錯,就是上面這么一點代碼就可以實現(xiàn)域名的whois查詢,上面的$whois_server就是各種域名注冊局whois查詢服務(wù)器的主機名(也就是地址),$domain就是我們需要查詢的域名,如csweigou.com。
某些拿來主義者可能看到這里,就會覺得:“臥槽,原來這么簡單”。實際上并沒有,要應(yīng)用到自己的項目,光上面的核心代碼是遠(yuǎn)遠(yuǎn)不夠的。據(jù)我們從頭完全實踐發(fā)現(xiàn)至少需要解決如下幾個問題。
1、域名注冊局的whois查詢服務(wù)器怎么獲取的問題
全球目前域名后綴大概有1000多個,比如我們國內(nèi)的.cn、.net.cn、.gov.cn、org.cn、hn.cn等等在全球訪問內(nèi)其實多算.cn這一種類型,雖然我們注冊域名的時候有.org.cn這種所謂的頂級域名,實際上你注冊的嚴(yán)格意義上講算是域名域名。域名在全球范圍類是有專門的機構(gòu)維護的,最知名的莫過于icann了;我們國內(nèi)相應(yīng)的就是中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)。所有的查詢服務(wù)器我們都可以在這個頁面查到詳細(xì)數(shù)據(jù):
https://www.iana.org/domains/root/db
這個數(shù)據(jù)列表除了這些數(shù)據(jù),還包括各種后綴域名的注冊局信息。如下圖所示:
2、查詢響應(yīng)速度和頻次的問題
通過實踐發(fā)現(xiàn),注冊局查詢服務(wù)器在境外的查詢速度會很慢,比如最常見的com域名查詢就經(jīng)常需要超過1秒的時間,實踐證明通過境外服務(wù)器進行查詢會快很多,因此怎么做就不用細(xì)說了。此外,不同查詢服務(wù)器對查詢的頻次是有限制的,單位時間查詢次數(shù)過多會被限制查詢。至于如何突破這種限制,相信你能有耐心看到這里來說明自己肯定是開發(fā)者,因此也不是啥難事了。
3、查詢得到的whois的信息需要進行數(shù)據(jù)清洗的問題
不同的查詢服務(wù)器得到的數(shù)據(jù)字段是不一樣的,所以需要有點耐心去做查詢得到的數(shù)據(jù)清理,清理成為我們對于多種不同域名查詢得到的統(tǒng)一字段。比如我們最需要的域名創(chuàng)建時間、更新時間、過期時間、域名狀態(tài)等。如何進行數(shù)據(jù)清理,在我看來應(yīng)該是作為開發(fā)者的基本功。這里插一句,一開始筆者是直接找github上人家寫的清理邏輯,搜索了一些庫瀏覽后發(fā)現(xiàn),這些庫要么太臃腫,要么太簡單不能實現(xiàn)完整功能;因此最終還是自己動手寫了一遍。
最后分享一張以我們微構(gòu)網(wǎng)絡(luò)網(wǎng)站域名csweigou.com為例通過該成果接口查詢的結(jié)果吧:
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流