2010-11-10 106 views
2

嗨,我一直在搞這個Whois腳本,我得到了'net,並且一直在弄亂變量和數組,一直試圖弄清楚爲什麼它不會返回Google和Facebook的whois結果(我測試過谷歌,因爲這是顯而易見的),然後在學習它與Whois垃圾郵件相關的事情之後測試Facebook,並且人們添加了此腳本拾取的google.com子域(與facebook發生的情況相同)...Whois服務器不返回結果?

做完之後我的作業是設法讓它返回所有結果的列表(通過刪除將所需的「=」。$域添加到域變量的腳本部分)

之後,返回所有結果,並且我瞭解到該腳本正在接收Whois服務器第一個結果(這是一個google.com.with.added.spam.com),因此「google.com」無法在與「google.com.with.added.spam.com」相同的whois服務器上找到它返回空白。

至於修復它我從扭轉preg_match_all陣列(抓住最後的域名服務器),以編輯所有我能想到的..

任何幫助將不勝感激變量都試過了。

在此先感謝!

而現在的代碼:

<?php 

$domain = $_GET['domain']; 

// For the full list of TLDs/Whois servers see http://www.iana.org/domains/root/db/ and http://www.whois365.com/en/listtld/ 
$whoisservers = array(
    "ac" =>"whois.nic.ac", 
    "ae" =>"whois.nic.ae", 
    "aero"=>"whois.aero", 
    "af" =>"whois.nic.af", 
    "ag" =>"whois.nic.ag", 
    "al" =>"whois.ripe.net", 
    "am" =>"whois.amnic.net", 
    "arpa" =>"whois.iana.org", 
    "as" =>"whois.nic.as", 
    "asia" =>"whois.nic.asia", 
    "at" =>"whois.nic.at", 
    "au" =>"whois.aunic.net", 
    "az" =>"whois.ripe.net", 
    "ba" =>"whois.ripe.net", 
    "be" =>"whois.dns.be", 
    "bg" =>"whois.register.bg", 
    "bi" =>"whois.nic.bi", 
    "biz" =>"whois.biz", 
    "bj" =>"whois.nic.bj", 
    "br" =>"whois.registro.br", 
    "bt" =>"whois.netnames.net", 
    "by" =>"whois.ripe.net", 
    "bz" =>"whois.belizenic.bz", 
    "ca" =>"whois.cira.ca", 
    "cat" =>"whois.cat", 
    "cc" =>"whois.nic.cc", 
    "cd" =>"whois.nic.cd", 
    "ch" =>"whois.nic.ch", 
    "ci" =>"whois.nic.ci", 
    "ck" =>"whois.nic.ck", 
    "cl" =>"whois.nic.cl", 
    "cn" =>"whois.cnnic.net.cn", 
    "com" =>"whois.verisign-grs.com", 
    "coop" =>"whois.nic.coop", 
    "cx" =>"whois.nic.cx", 
    "cy" =>"whois.ripe.net", 
    "cz" =>"whois.nic.cz", 
    "de" =>"whois.denic.de", 
    "dk" =>"whois.dk-hostmaster.dk", 
    "dm" =>"whois.nic.cx", 
    "dz" =>"whois.ripe.net", 
    "edu" =>"whois.educause.edu", 
    "ee" =>"whois.eenet.ee", 
    "eg" =>"whois.ripe.net", 
    "es" =>"whois.ripe.net", 
    "eu" =>"whois.eu", 
    "fi" =>"whois.ficora.fi", 
    "fo" =>"whois.ripe.net", 
    "fr" =>"whois.nic.fr", 
    "gb" =>"whois.ripe.net", 
    "gd" =>"whois.adamsnames.com", 
    "ge" =>"whois.ripe.net", 
    "gg" =>"whois.channelisles.net", 
    "gi" =>"whois2.afilias-grs.net", 
    "gl" =>"whois.ripe.net", 
    "gm" =>"whois.ripe.net", 
    "gov" =>"whois.nic.gov", 
    "gr" =>"whois.ripe.net", 
    "gs" =>"whois.nic.gs", 
    "gw" =>"whois.nic.gw", 
    "gy" =>"whois.registry.gy", 
    "hk" =>"whois.hkirc.hk", 
    "hm" =>"whois.registry.hm", 
    "hn" =>"whois2.afilias-grs.net", 
    "hr" =>"whois.ripe.net", 
    "hu" =>"whois.nic.hu", 
    "ie" =>"whois.domainregistry.ie", 
    "il" =>"whois.isoc.org.il", 
    "in" =>"whois.inregistry.net", 
    "info" =>"whois.afilias.net", 
    "int" =>"whois.iana.org", 
    "io" =>"whois.nic.io", 
    "iq" =>"vrx.net", 
    "ir" =>"whois.nic.ir", 
    "is" =>"whois.isnic.is", 
    "it" =>"whois.nic.it", 
    "je" =>"whois.channelisles.net", 
    "jobs" =>"jobswhois.verisign-grs.com", 
    "jp" =>"whois.jprs.jp", 
    "ke" =>"whois.kenic.or.ke", 
    "kg" =>"www.domain.kg", 
    "ki" =>"whois.nic.ki", 
    "kr" =>"whois.nic.or.kr", 
    "kz" =>"whois.nic.kz", 
    "la" =>"whois.nic.la", 
    "li" =>"whois.nic.li", 
    "lt" =>"whois.domreg.lt", 
    "lu" =>"whois.dns.lu", 
    "lv" =>"whois.nic.lv", 
    "ly" =>"whois.nic.ly", 
    "ma" =>"whois.iam.net.ma", 
    "mc" =>"whois.ripe.net", 
    "md" =>"whois.ripe.net", 
    "me" =>"whois.meregistry.net", 
    "mg" =>"whois.nic.mg", 
    "mil" =>"whois.nic.mil", 
    "mn" =>"whois.nic.mn", 
    "mobi" =>"whois.dotmobiregistry.net", 
    "ms" =>"whois.adamsnames.tc", 
    "mt" =>"whois.ripe.net", 
    "mu" =>"whois.nic.mu", 
    "museum" =>"whois.museum", 
    "mx" =>"whois.nic.mx", 
    "my" =>"whois.mynic.net.my", 
    "na" =>"whois.na-nic.com.na", 
    "name" =>"whois.nic.name", 
    "net" =>"whois.verisign-grs.net", 
    "nf" =>"whois.nic.nf", 
    "nl" =>"whois.domain-registry.nl", 
    "no" =>"whois.norid.no", 
    "nu" =>"whois.nic.nu", 
    "nz" =>"whois.srs.net.nz", 
    "org" =>"whois.pir.org", 
    "pl" =>"whois.dns.pl", 
    "pm" =>"whois.nic.pm", 
    "pr" =>"whois.uprr.pr", 
    "pro" =>"whois.registrypro.pro", 
    "pt" =>"whois.dns.pt", 
    "re" =>"whois.nic.re", 
    "ro" =>"whois.rotld.ro", 
    "ru" =>"whois.ripn.net", 
    "sa" =>"whois.nic.net.sa", 
    "sb" =>"whois.nic.net.sb", 
    "sc" =>"whois2.afilias-grs.net", 
    "se" =>"whois.iis.se", 
    "sg" =>"whois.nic.net.sg", 
    "sh" =>"whois.nic.sh", 
    "si" =>"whois.arnes.si", 
    "sk" =>"whois.ripe.net", 
    "sm" =>"whois.ripe.net", 
    "st" =>"whois.nic.st", 
    "su" =>"whois.ripn.net", 
    "tc" =>"whois.adamsnames.tc", 
    "tel" =>"whois.nic.tel", 
    "tf" =>"whois.nic.tf", 
    "th" =>"whois.thnic.net", 
    "tj" =>"whois.nic.tj", 
    "tk" =>"whois.dot.tk", 
    "tl" =>"whois.nic.tl", 
    "tm" =>"whois.nic.tm", 
    "tn" =>"whois.ripe.net", 
    "to" =>"whois.tonic.to", 
    "tp" =>"whois.nic.tl", 
    "tr" =>"whois.nic.tr", 
    "travel" =>"whois.nic.travel", 
    "tv" => "tvwhois.verisign-grs.com", 
    "tw" =>"whois.twnic.net.tw", 
    "ua" =>"whois.net.ua", 
    "ug" =>"whois.co.ug", 
    "uk" =>"whois.nic.uk", 
    "us" =>"whois.nic.us", 
    "uy" =>"nic.uy", 
    "uz" =>"whois.cctld.uz", 
    "va" =>"whois.ripe.net", 
    "vc" =>"whois2.afilias-grs.net", 
    "ve" =>"whois.nic.ve", 
    "vg" =>"whois.adamsnames.tc", 
    "wf" =>"whois.nic.wf", 
    "ws" =>"whois.website.ws", 
    "yt" =>"whois.nic.yt", 
    "yu" =>"whois.ripe.net"); 

function LookupDomain($domain){ 
    global $whoisservers; 
    $domain_parts = explode(".", $domain); 
    $tld = strtolower(array_pop($domain_parts)); 
    $whoisserver = $whoisservers[$tld]; 
    if(!$whoisserver) { 
     return "Error: No appropriate Whois server found for $domain domain!"; 
    } 
    $result = QueryWhoisServer($whoisserver, $domain); 
    if(!$result) { 
     return "Error: No results retrieved from $whoisserver server for $domain domain!"; 
    } 
    else { 
     while(strpos($result, "Whois Server:") !== FALSE){ 
      preg_match("/Whois Server: (.*)/", $result, $matches); 
      $secondary = $matches[1]; 
      if($secondary) { 
       $result = QueryWhoisServer($secondary, $domain); 
       $whoisserver = $secondary; 
      } 
     } 
    } 
    return "$domain domain lookup results from $whoisserver server:\n\n" . $result; 
} 

function LookupIP($ip) { 
    $whoisservers = array(
     //"whois.afrinic.net", // Africa - returns timeout error :-(
     "whois.lacnic.net", // Latin America and Caribbean - returns data for ALL locations worldwide :-) 
     "whois.apnic.net", // Asia/Pacific only 
     "whois.arin.net", // North America only 
     "whois.ripe.net" // Europe, Middle East and Central Asia only 
    ); 
    $results = array(); 
    foreach($whoisservers as $whoisserver) { 
     $result = QueryWhoisServer($whoisserver, $ip); 
     if($result && !in_array($result, $results)) { 
      $results[$whoisserver]= $result; 
     } 
    } 
    $res = "RESULTS FOUND: " . count($results); 
    foreach($results as $whoisserver=>$result) { 
     $res .= "\n\n-------------\nLookup results for $ip from $whoisserver server:\n\n$result"; 
    } 
    return $res; 
} 

function ValidateIP($ip) { 
    $ipnums = explode(".", $ip); 
    if(count($ipnums) != 4) { 
     return false; 
    } 
    foreach($ipnums as $ipnum) { 
     if(!is_numeric($ipnum) || ($ipnum > 255)) { 
      return false; 
     } 
    } 
    return $ip; 
} 

function ValidateDomain($domain) { 
    if(!preg_match("/^([-a-z0-9]{2,100})\.([a-z\.]{2,8})$/i", $domain)) { 
     return false; 
    } 
    return $domain; 
} 

function QueryWhoisServer($whoisserver, $domain) { 
    $port = 43; 
    $timeout = 10; 
    $fp = @fsockopen($whoisserver, $port, $errno, $errstr, $timeout) or die("Socket Error " . $errno . " - " . $errstr); 
    if($whoisserver == "whois.verisign-grs.com") $domain = "=".$domain; // whois.verisign-grs.com requires the equals sign ("=") or it returns any result containing the searched string. 
    fputs($fp, $domain . "\r\n"); 
    $out = ""; 
    while(!feof($fp)){ 
     $out .= fgets($fp); 
    } 
    fclose($fp); 

    $res = ""; 
    if((strpos(strtolower($out), "error") === FALSE) && (strpos(strtolower($out), "not allocated") === FALSE)) { 
     $rows = explode("\n", $out); 
     foreach($rows as $row) { 
      $row = trim($row); 
      if(($row != '') && ($row{0} != '#') && ($row{0} != '%')) { 
       $res .= $row."\n"; 
      } 
     } 
    } 
    return $res; 
} 
?> 
<html> 
<head> 
<title>Whois Lookup Script</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 

<body> 
<form action="<?=$_SERVER['PHP_SELF'];?>"> 
<p><b><label for="domain">Domain/IP Address:</label></b> <input type="text" name="domain" id="domain" value="<?=$domain;?>"> <input type="submit" value="Lookup"></p> 
</form> 
<? 
if($domain) { 
    $domain = trim($domain); 
    if(substr(strtolower($domain), 0, 7) == "http://") $domain = substr($domain, 7); 
    if(substr(strtolower($domain), 0, 4) == "www.") $domain = substr($domain, 4); 
    if(ValidateIP($domain)) { 
     $result = LookupIP($domain); 
    } 
    elseif(ValidateDomain($domain)) { 
     $result = LookupDomain($domain); 
    } 
    else die("Invalid Input!"); 
    echo "<pre>\n" . $result . "\n</pre>\n"; 
} 
?> 
</body> 
</html> 

回答

1

變化。com的服務器「whois.crsnic.net」,它應該工作

3

當你試圖發送域(例如:谷歌.com)從表單發送到您的腳本,而不是將其作爲「google.com」添加「域名」(即域名google.com)。

這是幹什麼用的,它告訴whois服務器找到這個域名(即google.com),而不是其他任何其他的域名。

因此,在「LookupDomain($ domain)」函數中,請確保$ domain的值應爲 'domain google.com',以顯示正確的結果。

1

這個腳本還沒有工作。所以你可以試試下面的代碼

<?php function whois_query($domain) 
{ 

// fix the domain name: 
$domain = strtolower(trim($domain)); 
$domain = preg_replace('/^http:\/\//i', '', $domain); 
$domain = preg_replace('/^www\./i', '', $domain); 
$domain = explode('/', $domain); 
$domain = trim($domain[0]); 

// split the TLD from domain name 
$_domain = explode('.', $domain); 
$lst = count($_domain)-1; 
$ext = $_domain[$lst]; 

// the list of whois servers 
// most taken from www.iana.org/domains/root/db/ 
$servers = array(
    "biz" => "whois.neulevel.biz", 
    "com" => "whois.internic.net", 
    "us" => "whois.nic.us", 
    "coop" => "whois.nic.coop", 
    "info" => "whois.nic.info", 
    "name" => "whois.nic.name", 
    "net" => "whois.internic.net", 
    "gov" => "whois.nic.gov", 
    "edu" => "whois.internic.net", 
    "mil" => "rs.internic.net", 
    "int" => "whois.iana.org", 
    "ac" => "whois.nic.ac", 
    "ae" => "whois.uaenic.ae", 
    "at" => "whois.ripe.net", 
    "au" => "whois.aunic.net", 
    "be" => "whois.dns.be", 
    "bg" => "whois.ripe.net", 
    "br" => "whois.registro.br", 
    "bz" => "whois.belizenic.bz", 
    "ca" => "whois.cira.ca", 
    "cc" => "whois.nic.cc", 
    "ch" => "whois.nic.ch", 
    "cl" => "whois.nic.cl", 
    "cn" => "whois.cnnic.net.cn", 
    "cz" => "whois.nic.cz", 
    "de" => "whois.nic.de", 
    "fr" => "whois.nic.fr", 
    "hu" => "whois.nic.hu", 
    "ie" => "whois.domainregistry.ie", 
    "il" => "whois.isoc.org.il", 
    "in" => "whois.ncst.ernet.in", 
    "ir" => "whois.nic.ir", 
    "mc" => "whois.ripe.net", 
    "to" => "whois.tonic.to", 
    "tv" => "whois.tv", 
    "ru" => "whois.ripn.net", 
    "org" => "whois.pir.org", 
    "aero" => "whois.information.aero", 
    "nl" => "whois.domain-registry.nl", 
    "uk" => "whois.nic.uk", 
    "us" => "whois.nic.us", 
    "travel" => "whois.nic.travel", 
    "gov" => "whois.dotgov.gov", 
    "it" => "whois.nic.it" 
); 

if (!isset($servers[$ext])) { 
    die('Error: No matching whois server found!'); 
} 

$nic_server = $servers[$ext]; 

$output = ''; 

// connect to whois server: 
if ($conn = fsockopen($nic_server, 43)) { 
    fwrite($conn, $domain."\r\n"); 
    while (!feof($conn)) { 
    $output .= fgets($conn, 128); 
    } 
    fclose($conn); 
} else { 
    die('Error: Could not connect to ' . $nic_server . '!'); 
} 
return $output; 
} 
echo '<pre>'.whois_query('google.com').'</pre>'; 
?>