php批量檢查網域名稱是否登入並擷取註冊網域名稱的註冊公司

來源:互聯網
上載者:User

標籤:style   class   blog   c   code   java   

一個小任務,給了一個包含了幾千條網域名稱的Excel,檢測是否已經註冊,註冊的話擷取註冊公司,並擷取對應網站是否能正常開啟,最終以Excel檔案呈現。

1.起初,想到的就是讀取網域名稱,通過http調用 xinnet或者是萬網的 whois查詢介面查詢,而後將頁面結果正則匹配Registrant:,registrant organization:,registrant name:欄位,擷取該行:後邊的內容。這樣的結果就是很亂,很多註冊公司不用這三個欄位,沒有一個統一的標準來判定是否註冊及註冊公司。

2.後來搜到一個類似的解決方案 http://stackoverflow.com/questions/16234477/php-script-that-finds-the-registrar-of-any-domain-name ,直接通過讀取 whois伺服器,實現網域名稱的查詢。根據被查詢網域名稱的尾碼名,訪問不同的 whois伺服器,查詢結果。但是其包含的尾碼也不全,而且很多返回的whois內容只有Registrar欄位,並且運行中容易斷掉。

3.網上還有一種是調用 phpWhois 組件,實現 whois資訊查詢的核心代碼部分:

<pre><?phpinclude(‘whois_inc/whois.main.php‘);$whois =newWhois();$result = $whois->Lookup($domain);$output = implode("\n", $result[‘rawdata‘]);echo $output;?></pre>

4.後來高人指點,應該先擷取所有網域名稱的whois資訊到資料庫,再慢慢分析,根據規律,分類,再分類,然後再擷取。

首先用PHPExcel將網域名稱匯入資料庫。

<?phperror_reporting ( E_ALL ); // 開啟錯誤set_time_limit ( 0 ); // 指令碼不逾時require_once ‘library/PHPExcel.php‘;require_once ‘library/PHPExcel/IOFactory.php‘;require_once ‘library/PHPExcel/Reader/Excel5.php‘;$conn = mysql_connect ( "localhost", "root", "" );mysql_select_db ( "test1", $conn );mysql_query ( "set names utf8" );$inputFileName = ‘./example.xls‘;// $inputFileName = ‘./test.xls‘;$objReader = PHPExcel_IOFactory::createReader ( ‘Excel5‘ ); $objPHPExcel = $objReader->load ( $inputFileName ); // $filename可以是上傳的檔案,或者是指定的檔案$sheet = $objPHPExcel->getSheet ( 0 );// var_dump($sheet);exit;$highestRow = $sheet->getHighestRow (); // 取得總行數$highestColumn = $sheet->getHighestColumn (); // 取得總列數                                             // 迴圈讀取excel檔案,讀取一條,插入一條for($j = 2; $j <= $highestRow; $j ++) {    $a = $objPHPExcel->getActiveSheet ()->getCell ( "A" . $j )->getValue ();     $b = $objPHPExcel->getActiveSheet ()->getCell ( "B" . $j )->getValue ();     $c = $objPHPExcel->getActiveSheet ()->getCell ( "C" . $j )->getValue ();        $sql = "INSERT INTO domaininfo(domain,regdate,expdate) VALUES(‘$a‘,‘$b‘,‘$c‘)";    mysql_query ( $sql );}echo "success";?>

 

linux系統可以使用whois 命令直接擷取網域名稱的whois資訊,儲存到資料庫。

<?phperror_reporting ( E_ALL ); // 開啟錯誤set_time_limit ( 0 ); // 指令碼不逾時$conn = mysql_connect ( "localhost", "test", "test1" );mysql_select_db ( "test", $conn );mysql_query ( "set names utf8" );$result = mysql_query ( "select * from domaininfo  " );while ( $row = mysql_fetch_array ( $result ) ) {    $domain = $row[‘domain‘];    $retval = shell_exec("whois $domain");    $retval = addslashes($retval);    $sql = "update domaininfo set whois = ‘" . $retval . "‘  where id = $row[id]";    // echo $sql;exit;    mysql_query ( $sql );}echo "over";?>

之後根據whois資訊分類,將主表中網域名稱逐漸分離到其他表中。

根據匹配 no matching records或NOT FOUND或no match for 分離到domainNomatch表,
匹配Registrant:並有傳回值 if (preg_match ( ‘/registrant\s*:([^\r\n]+)/i‘, $row[‘whois‘], $matches ))分離到一個表並擷取$matches[1]為註冊公司。

匹配Registrant Organization:到一個表並擷取註冊公司,匹配Registrant name: 分離到一個表並擷取。

主表還剩下很多登入但只有註冊商沒有註冊公司返回的網域名稱,大多是com尾碼的,不知道為什麼whois命令對com的網域名稱返回的資訊不夠完整,後來對這些網域名稱分離出來到一個網站上抓取匹配

 

function getRegistantName($domain) {    $url = "http://tool.admin5.com/whois/?q=$domain";    $contents = @file_get_contents ( $url );    // print_r($contents);echo "<br>";    if (preg_match ( ‘/registrant\s*[Organization]*:([^<]+)/i‘, $contents, $matches )) {        // print_r($matches);        return trim ( $matches [1] );    } elseif (preg_match ( ‘/registrant\s*[name]*:([^<]+)/i‘, $contents, $matches )) {        return trim ( $matches [1] );    } else {        return "未找到資訊";    }}

最後還剩下個位元的特殊網域名稱直接手動處理了。。

還有擷取狀態代碼:

function getHttpStatusCode($url) {     $curl = curl_init (); // 初始化新會話,返回curl控制代碼     curl_setopt ( $curl, CURLOPT_URL, $url ); // 擷取內容url     curl_setopt ( $curl, CURLOPT_HEADER, 1 ); // 擷取http頭資訊     curl_setopt ( $curl, CURLOPT_NOBODY, 1 ); // 不返回html的body資訊     curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 返回資料流,不直接輸出     curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 逾時時間長度,單位秒     curl_exec ( $curl ); // 執行該會話     $rtn = curl_getinfo ( $curl, CURLINFO_HTTP_CODE );     curl_close ( $curl ); // 關閉會話     return $rtn; }

各個表處理完後在輸出到Excel檔案,整合。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.