Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $domain = isset($_GET['q'])?$_GET['q']:(isset($argv[1])?$argv[1]:'');
- $whoisservers = json_decode(file_get_contents('WhoIsServers.json'),true);
- $domain = strtolower(trim($domain));
- $domain = strip_tags($domain);
- $domain = str_replace("http://", "", $domain);
- $domain = str_replace("https://", "", $domain);
- $domain = str_replace("www.", "", $domain);
- $domain = explode("/", $domain, 2)[0];
- $domain = strtolower($domain);
- $domain = htmlspecialchars($domain);
- $explodedDomain = explode(".", $domain);
- $explodedCount = count($explodedDomain);
- if(empty($explodedDomain[$explodedCount-1]) || empty($domain)){
- echo json_encode(array('error'=>'Invalid Domain'));
- die();
- } else {
- $domainArr = array_slice($explodedDomain, -2);
- $domain = implode(".", $domainArr);
- //$domain = $explodedDomain[$explodedCount-2].".".$explodedDomain[$explodedCount-1];
- if($explodedCount >= 3){
- if(array_key_exists($explodedDomain[$explodedCount-1], $whoisservers)){
- if(array_key_exists($explodedDomain[$explodedCount-2], $whoisservers)){
- //$domain = $explodedDomain[$explodedCount-3].".".$explodedDomain[$explodedCount-2].".".$explodedDomain[$explodedCount-1];
- $domainArr = array_slice($explodedDomain, -3);
- $domain = implode(".", $domainArr);
- }
- } else {
- echo json_encode(array('error'=>'No matching nic server found!'));
- die();
- }
- }
- $tld = substr($domain, strrpos($domain, '.') + 1);
- $serverUrl = $whoisservers[$tld];
- // connect to whois server:
- $loop = true;
- $count = 0;
- while($loop) {
- $f = fsockopen($serverUrl, 43);
- $needToBeAddEqual = ["whois.verisign-grs.com", "whois.verisign-grs.net"];
- if (in_array($serverUrl, $needToBeAddEqual)) {
- fputs($f, "=" . $domain . "\r\n");
- } else {
- fputs($f, $domain . "\r\n");
- }
- $data = [];
- while (!feof($f)){
- $data[] = rtrim(fgets($f), "\n");
- }
- $stringsExistToMeanAvailable = ["No Match", "No match", "No match for", "Status: AVAILABLE", "NOT FOUND", "Not found", "No Found", "No information available about domain name", "No matching record.", "No entries found in the AFNIC Database.", "The domain has not been registered.", "Status: free"];
- $stringsExistToMeanErrorInput = ["Incorrect input, please try again.", "Error for \""];
- $stringsExistToMeanWaitSomeTime = ["Please maintain at least " => "Please maintain at least %d-second time before starting another enquiry."];
- foreach($data as $eachLine) {
- foreach($stringsExistToMeanAvailable as $stringExistToMeanAvailable){
- if(strpos($eachLine, $stringExistToMeanAvailable) !== false){
- echo json_encode(['error'=>'No domain found']);
- die;
- }
- }
- foreach($stringsExistToMeanErrorInput as $stringExistToMeanErrorInput){
- if(strpos($eachLine, $stringExistToMeanErrorInput) !== false){
- echo json_encode(['error'=>'Invalid domain']);
- die;
- }
- }
- foreach($stringsExistToMeanWaitSomeTime as $stringExistToMeanWaitSomeTime => $sscanfFullString){
- if(strpos($eachLine, $stringExistToMeanWaitSomeTime) !== false){
- if($sscanfFullString == "N/A"){
- echo json_encode(['error'=>'Please wait sometime']);
- }else{
- sscanf($eachLine, $sscanfFullString, $second);
- if(!empty($second)){
- echo json_encode(['error'=>'Please wait '.$second.' seconds']);
- }else{
- echo json_encode(['error'=>'Please wait sometime']);
- }
- }
- }
- }
- } /* Data loop end */
- //print_r($data);
- $whoisServerFromWhois = parse($data, $domain, 'Domain Name:', ['Whois Server' => 'whois_server','Registrar WHOIS Server'=>'whois_server','WHOIS Server'=>'whois_server'], true);
- if(!empty($whoisServerFromWhois['whois_server'][0])){
- $serverUrl = $whoisServerFromWhois['whois_server'][0];
- }
- if($count>=1){
- $loop = false;
- }
- $count++;
- } /* While loop end */
- $parsedResult = parse_domain($data, $domain, $tld);
- if(!empty($parsedResult[0])){
- if(array_key_exists('error',$parsedResult)) {
- echo json_encode($parsedResult);
- die();
- }
- } else {
- $new_data = [];
- foreach($data as $row) {
- $pieces = explode(':',$row);
- if(count($pieces)>=2) {
- if(trim($pieces[0])=='DNSSEC') {
- break;
- } else if(trim($pieces[1])!='') {
- $key = array_shift($pieces);
- $new_data[trim($key)] = trim(implode(':',$pieces));
- }
- }
- }
- echo json_encode($new_data);
- }
- }
- function parse($data, $domain, $domainWord, $keywords, $breakOnEnter)
- {
- $found = false;
- $domainWordLen = strlen($domainWord);
- $res = [];
- foreach ($data AS $d)
- {
- $d = trim($d);
- if ($d == '')
- {
- if ($breakOnEnter)
- {
- $found = false;
- }
- continue;
- }
- $pos = strpos($d, $domainWord);
- if ($pos !== false)
- {
- $dom = strtolower(trim(substr($d, $pos + $domainWordLen)));
- if ($dom == $domain)
- {
- $found = true;
- }
- }
- if ($found)
- {
- $pos = strpos($d, ':');
- if ($pos !== false)
- {
- $keyword = substr($d, 0, $pos);
- if (isset($keywords[$keyword]))
- {
- $t = trim(substr($d, $pos+1));
- if ($t != '')
- {
- $res[$keywords[$keyword]][] = $t;
- }
- }
- else
- {
- $keyword = '';
- }
- }
- else if ($keyword)
- {
- $res[$keywords[$keyword]][] = $d;
- }
- }
- }
- return $res;
- }
- function parse_domain($data, $domain, $tld)
- {
- $domainWords = [
- 'def' => 'Domain Name:',
- 'com' => 'Domain Name:',
- 'org' => 'Domain Name:',
- 'net' => 'Domain Name:',
- 'biz' => 'Domain Name:',
- 'info' => 'Domain Name:',
- 'name' => 'Domain Name:',
- 'asia' => 'Domain Name:',
- 'pl' => 'DOMAIN NAME:',
- 'de' => 'Domain:',
- 'fr' => 'domain:',
- 'eu' => 'Domain:',
- 'us' => 'Domain Name:',
- 'cn' => 'Domain Name:',
- 'hk' => 'Domain Name:',
- 'tw' => 'Domain Name:'
- ];
- $domainsKeywords = [
- [ 'id' => ['Domain ID', 'Domain Name ID', 'Registry Domain ID', 'ROID'] ],
- [ 'domain' => ['Domain name', 'Domain Name', 'DOMAIN NAME', 'Domain', 'domain'] ],
- [ 'bundled_domain' => ['Bundled Domain Name'] ],
- [ 'dns' => ['Name Server', 'Nameservers', 'Name servers', 'Name Servers Information', 'Domain servers in listed order', 'nserver', 'nameservers'] ],
- [ 'registrar' => ['Registrar', 'registrar', 'Registrant', 'Registrar Name', 'Created by Registrar'] ],
- [ 'registrar_url' => ['Registrar URL', 'Registrar URL (registration services)'] ],
- [ 'sponsoring_registrar' => [ 'Sponsoring Registrar'] ],
- [ 'whois_server' => ['Whois Server', 'WHOIS SERVER', 'Registrar WHOIS Server'] ],
- [ 'created' => ['Creation Date', 'Created On', 'Registration Time', 'Domain Create Date', 'Domain Registration Date', 'Domain Name Commencement Date', 'created'] ],
- [ 'updated' => ['last-update', 'Updated Date', 'Domain Last Updated Date', 'last modified'] ],
- [ 'expires' => ['Expiry Date', 'Expiration Date', 'Expiration Time', 'Domain Expiration Date', 'Registrar Registration Expiration Date', 'Record expires on', 'Registry Expiry Date', 'renewal date'] ],
- [ 'status' => ['Status', 'status', 'Domain Status'] ],
- ];
- $toBeParseKeywords = [];
- foreach ($domainsKeywords as $domainKeywords){
- foreach ($domainKeywords as $var => $keywords){
- foreach($keywords as $keyword){
- $toBeParseKeywords[$keyword] = $var;
- }
- }
- }
- $contactInfoCategories = [
- [ 'id' => ['ID'] ],
- [ 'name' => ['Name'] ],
- [ 'organization' => ['Organization'] ],
- [ 'city' => ['City'] ],
- [ 'country' => ['Country', 'Country/Economy'] ],
- [ 'address' => ['Street', 'Address', 'Address1', 'Address2', 'Address3', 'Address4','Postal Code'] ],
- [ 'state_province' => ['State/Province','State'] ],
- [ 'postal_code' => ['Postal Code'] ],
- [ 'email' => ['Email'] ],
- [ 'phone' => ['Phone', 'Phone Number','Mobile'] ],
- [ 'phone_ext' => ['Phone Ext', 'Phone Ext.'] ],
- [ 'fax' => ['Fax', 'FAX', 'Facsimile Number'] ],
- [ 'fax_ext' => ['Fax Ext', 'FAX Ext.'] ]
- ];
- $contactInfoKeywords = [
- [ 'admin' => ['Admin', 'Administrative', 'Administrative Contact'] ],
- [ 'registrant' => ['Registrant'] ],
- [ 'tech' => ['Tech', 'Technical', 'Technical Contact'] ],
- [ 'billing' => ['Bill', 'Billing', 'Billing Contact'] ]
- ];
- foreach ($contactInfoKeywords as $contactInfoKeyword){
- foreach($contactInfoKeyword as $contactKey => $contactKeywords){
- foreach($contactKeywords as $contactKeyword){
- foreach ($contactInfoCategories as $contactInfoCategory){
- foreach ($contactInfoCategory as $var => $keywords){
- foreach($keywords as $keyword){
- $toBeParseKeywords[$contactKeyword." ".$keyword] = $contactKey."_".$var;
- }
- }
- }
- }
- }
- }
- if(array_key_exists($tld, $domainWords)){
- $domainWord = $domainWords[$tld];
- }else{
- $domainWord = $domainWords['def'];
- }
- $data = array_filter(array_map("ifWhiteSpace", $data));
- $parseResult = parse($data, $domain, $domainWord, $toBeParseKeywords, true);
- $needToBeSingles = ["domain", "id"];
- foreach($needToBeSingles as $needToBeSingle){
- if(!empty($parseResult[$needToBeSingle])){
- $parseResult[$needToBeSingle] = $parseResult[$needToBeSingle][0];
- }
- }
- if(!empty($parseResult['domain'])){
- $parseResult['domain'] = strtolower($parseResult['domain']);
- }
- $needToBeParsedTimeKeys = ['created', 'expires', 'updated'];
- foreach($needToBeParsedTimeKeys as $needToBeParsedTimeKey){
- if(!empty($parseResult[$needToBeParsedTimeKey])){
- $domainTime = $parseResult[$needToBeParsedTimeKey][0];
- //if ( (date_parse($domainTime)['warning_count'] == 0) && (date_parse($domainTime)['error_count'] == 0) ) {
- if (date_parse($domainTime)['error_count'] == 0) {
- $parsed_date = date_parse($domainTime);
- $parseResult[$needToBeParsedTimeKey."_parsed"] = $parsed_date;
- $date_string = date('Y-m-d H:i:s', mktime($parsed_date['hour'], $parsed_date['minute'], $parsed_date['second'], $parsed_date['month'], $parsed_date['day'], $parsed_date['year']));
- $parseResult[$needToBeParsedTimeKey."_parsed_string"] = $date_string;
- }else{
- $formatedTime = $domainTime;
- $formatedTime = str_replace("T", " ", $formatedTime);
- $formatedTime = str_replace("Z", " ", $formatedTime);
- $formatedTime = trim($formatedTime);
- $parsed_date = date_parse_from_format("Y-m-d H:i:s.u", $formatedTime);
- $parseResult[$needToBeParsedTimeKey."_parsed"] = $parsed_date;
- $date_string = date('Y-m-d H:i:s', mktime($parsed_date['hour'], $parsed_date['minute'], $parsed_date['second'], $parsed_date['month'], $parsed_date['day'], $parsed_date['year']));
- $parseResult[$needToBeParsedTimeKey."_parsed_string"] = $date_string;
- }
- }
- }
- foreach($parseResult as $eachParseResultKey => $eachParseResult){
- if (substr($eachParseResultKey, 0, 6) == "admin_") {
- unset($parseResult[$eachParseResultKey]);
- $key = substr($eachParseResultKey, 6);
- if($key != "address"){
- $eachParseResult = $eachParseResult[0];
- }
- $parseResult['admin'][$key] = $eachParseResult;
- }
- if (substr($eachParseResultKey, 0, 11) == "registrant_") {
- unset($parseResult[$eachParseResultKey]);
- $key = substr($eachParseResultKey, 11);
- if($key != "address"){
- $eachParseResult = $eachParseResult[0];
- }
- $parseResult['registrant'][$key] = $eachParseResult;
- }
- if (substr($eachParseResultKey, 0, 5) == "tech_") {
- unset($parseResult[$eachParseResultKey]);
- $key = substr($eachParseResultKey, 5);
- if($key != "address"){
- $eachParseResult = $eachParseResult[0];
- }
- $parseResult['tech'][$key] = $eachParseResult;
- }
- if (substr($eachParseResultKey, 0, 8) == "billing_") {
- unset($parseResult[$eachParseResultKey]);
- $key = substr($eachParseResultKey, 8);
- if($key != "address"){
- $eachParseResult = $eachParseResult[0];
- }
- $parseResult['bill'][$key] = $eachParseResult;
- }
- }
- $needToBeLowerCasedValueFathers = ['registrant', 'admin', 'tech', 'billing'];
- foreach($needToBeLowerCasedValueFathers as $needToBeLowerCasedValueFather){
- if(!empty($parseResult[$needToBeLowerCasedValueFather])){
- $needToBeLowerCasedValue = $parseResult[$needToBeLowerCasedValueFather]['email'];
- if(!empty($needToBeLowerCasedValue)){
- $parseResult[$needToBeLowerCasedValueFather]['email'] = strtolower($parseResult[$needToBeLowerCasedValueFather]['email']);
- }
- }
- }
- $needToAddCompletelyAddressArrays = ['registrant', 'admin', 'tech', 'billing'];
- foreach($needToAddCompletelyAddressArrays as $needToAddCompletelyAddressArray){
- if(!empty($parseResult[$needToAddCompletelyAddressArray])){
- if(!empty($parseResult[$needToAddCompletelyAddressArray]["address"])){
- $parseResult[$needToAddCompletelyAddressArray]["completely_address"] = implode(", ", $parseResult[$needToAddCompletelyAddressArray]["address"]);
- /* WILL CITY & COUNTRY WILL BE INCLUDE IN FULL ADDRESS? */
- $allExtraInfomations = ["city", "country"];
- foreach($allExtraInfomations as $extraInfomation){
- if(!empty($parseResult[$needToAddCompletelyAddressArray][$extraInfomation])){
- $parseResult[$needToAddCompletelyAddressArray]["completely_address"] .= ", ".$parseResult[$needToAddCompletelyAddressArray][$extraInfomation];
- }
- }
- $parseResult[$needToAddCompletelyAddressArray]["completely_address"] = ucwords(strtolower($parseResult[$needToAddCompletelyAddressArray]["completely_address"]));
- }
- }
- }
- if(empty($parseResult)){
- return ['error'=>'No data'];
- }
- return $parseResult;
- }
- function ifWhiteSpace($el){
- return trim($el, " ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement