Language PHP : Hypertext Preprocessor

 Charge moyenne sur 1mn : 0.77 Charge moyenne sur 5mn : 0.63 Charge moyenne sur 15mn : 0.65


PHP

PHP is a popular general-purpose scripting language that is particularly suited for web development.

Fast, flexible and pragmatic, PHP is made for any blog or for all the most popular sites in the world.

The word PHP or programming language contained in web pages and executed on servers, they return the result directly to the client who can never see the source. Allows you to create dynamic web pages.

PHP.Net © 2001-2020 The PHP Group: Language Reference

Predefined PHP classes to make our life easier :)






Blocs utilisateurs du site : Infos du compte / droits utilisateurs / récapitulatif

Identify yourself

Authenticate with your ZW3B account and take advantage of member services.

Username :
Password :
  
  

RDAP - Registration Data Access Protocol (class PHP)

  • RDAP - Registration Data Access Protocol (class PHP)
Class PHP du protocole RDAP (Registration Data Access Protocol) : Infos DN, DNS, ASN, IPv4 et IPv6 - Futur remplaçant du Whois (Qui est ?)

Informations :

Dates
  • Publish : : Saturdy 17 october 2020
  • Modification : Saturdy 17 october 2020

Share :

Un RIR est un Registre Internet Régional, un organisme qui alloue les blocs d'adresses IP et des numéros d'Autonomous System dans sa zone géographique.

Le Registration Data Access Protocol est un protocole de communication réseau informatique normalisé par un groupe de travail de l'IETF (Internet Engineering Task Force) en 2015, aprés des développements expérimentaux et des discussions approfondies. C'est un successeur du protocole WHOIS, utilisé pour rechercher des données d'enregistrement pertinentes à partir de ressources Internet telles que les noms de domaine, les adresses IP et les numéros de système autonome.

Alors que WHOIS récupère essentiellement du texte libre, RDAP fournit des données dans un format JSON standard lisible par machine. Afin d'atteindre cet objectif, la sortie de tous les serveurs WHOIS opérationnels a été analysée, en effectuant un recensement des étiquettes qu'ils utilisaient. Les concepteurs de RDAP, dont beaucoup sont membres de registres de numéros ou de noms, se sont efforcés de garder le protocole aussi simple que possible, car la complexité était considérée comme l'une des raisons pour lesquelles les tentatives précédentes, telles que CRISP, ont échoué. RDAP est basé sur des services Web RESTful, de sorte que les codes d'erreur, l'identification de l'utilisateur, l'authentification et le contrôle d'accès peuvent être fournis via HTTP.

Le plus grand retard dans la réalisation de RDAP s'est avéré être le bootstrap, déterminant où se trouve le serveur pour chaque domaine de premier niveau, plage d'adresses IP ou plage ASN. L'IANA a accepté d'héberger les informations de bootstrap dans des registres appropriés et de les publier à un emplacement bien connu URL au format JSON. Ces registres ont commencé vides et seront progressivement peuplés au fur et à mesure que les registrants de domaines et d'espaces d'adresse fourniront des informations sur le serveur RDAP à l'IANA. Pour les registres de numéros, ARIN a mis en place un service RDAP public qui comporte également une URL d'amorçage, similaire à ce qu'ils font pour WHOIS. Pour les registres de noms, l'ICANN exige la conformité RDAP depuis 2013.

Class PHP RDAP créée par LAB3W.ORJ

J'ai fais une class PHP RDAP pour utiliser et vérifier les informations sur les noms de domaine, les DNS, les ASN, les IPv4 et IPv6.

[php]
######################################################################
# ZW3B.Site v7.1.0 : The Web Sites Management System
# --------------------------------------------------------------------
#
# Copyright (c) 2020 by LAB3W : O.Romain Jaillet-ramey - (orj@lab3w.fr)
#
# Date Create : 2020/04/14
# Date Modify : 2020/04/18
#
# Web Site : http://www.lab3w.fr
# Web Site : http://www.lab3w.com
#
# Web Site : http://zw3b.fr
# Web Site : http://zw3b.tv
# Web Site : http://zw3b.site
# Web Site : http://zw3b.net
#
# This module is to manage ---------------------------- :: Descripton
#
# This program is free software. You can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License.
######################################################################


class zw3bRdap /*extends zw3b*/ {
    
    var $infoDN = array();
    var $infoNS = array();
    var $infoAutnum = array();
    var $infoIPv4 = array();
    var $infoIPv6 = array();

    public $rdap;
    
    public function __construct()
    {
        return $this->rdap;
        
    }
    
    private function curl_get_file_contents($URL)
    {
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);
        
        if ($contents) return $contents;
        else return FALSE;
    }
    
    private function uriBootstrapTLD($ext = null) {
        
        $ext = isset($ext) && !empty($ext) ? $ext : 'net';
        
        $bootstrapTLD = 'https://data.iana.org/rdap/dns.json';
        $bootstrapARRAY = $this->curl_get_file_contents($bootstrapTLD);
        $bootstrapARRAY = json_decode($bootstrapARRAY, true);
        
        foreach($bootstrapARRAY['services'] as $key => $services):
        //$servs = $services[$key][0][X];
        //$bootstrap[$ext]['url'] = $services[$key][1][0];
        foreach($services[0] as $clef => $bootstrapTLD):
        $bootstrap[$bootstrapTLD]['url']  = $bootstrapARRAY['services'][$key][1][0];
        endforeach;
        endforeach;
        
        $bootstrapURL= '';
        if(array_key_exists ($ext , $bootstrap ))
            $bootstrapURL = $bootstrap[$ext]['url'];
            
            // Link: https://www.registry.google/rdap/domain/dns.google
            // Link: https://rdap.markmonitor.com/rdap/domain/dns.google
            
            //echo ''.print_r($bootstrapURL,1).'';
            //echo ''.print_r($bootstrap,1).'';
            
            return $bootstrapURL;
            
    }
    
    private function uriBootstrapIPv4($ipv4 = null) {
        
        $ipv4 = isset($ipv4) && !empty($ipv4) ? $ipv4 : '';
        $ipv4BlOCK = strstr($ipv4, '.', true);
        $ipv4BlOCK = $ipv4BlOCK.'.0.0.0';
        
        $bootstrapIPv4 = 'https://data.iana.org/rdap/ipv4.json';
        $bootstrapARRAY = $this->curl_get_file_contents($bootstrapIPv4);
        $bootstrapARRAY = json_decode($bootstrapARRAY, true);
        
        foreach($bootstrapARRAY['services'] as $key => $services):
        foreach($services[0] as $clef => $bootstrapIPv4):
        $bootstrapIPv4 = explode('/', $bootstrapIPv4);
        $bootstrapIPv4 = $bootstrapIPv4[0];
        $bootstrap[$bootstrapIPv4]['url']  = $bootstrapARRAY['services'][$key][1][0];
        endforeach;
        endforeach;
        
        $bootstrapURL= '';
        if(array_key_exists ($ipv4BlOCK , $bootstrap ))
            $bootstrapURL = $bootstrap[$ipv4BlOCK]['url'];
            
            //echo ''.print_r($bootstrapURL,1).'';
            //echo ''.print_r($bootstrap,1).'';
            
            return $bootstrapURL;
    }
    
    //---------------------------------------------------------------------------------
    
    protected function getInfosAS($request = array()) {
        
        $request['caption'];
        $request['value'];
        
        $request['url'] = 'https://rdap.arin.net/registry/autnum/'.$request['value'];
        
        return $this->getInfosBootstrap($request);
    }
    
    protected function getInfosDN($request = array()) {
        
        $request['caption'];
        $request['value'];
        $request['ext'];
        
        $request['url'] = $this->uriBootstrapTLD($request['ext']).'domain/'.$request['value'];
        
        unset($request['ext']);
        
        return $this->getInfosBootstrap($request);
    }
    
    protected function getInfosNS($request = array()) {
        
        $request['caption'];
        $request['value'];
        $request['ext'];
        
        $request['url'] = $this->uriBootstrapTLD($request['ext']).'nameserver/'.$request['value'];
        
        unset($request['ext']);
        
        return $this->getInfosBootstrap($request);
    }
    
    protected function getInfosIPv4($request = array()) {
        
        $request['caption'];
        $request['value'];
        
        $request['url'] = $this->uriBootstrapIPv4($request['value']).'ip/'.$request['value'];
        
        return $this->getInfosBootstrap($request);
    }
    
    protected function getInfosIPv6($request = array()) {
        
        $info = $request;
        
        $ipv6 = isset($request['value']) && !empty($request['value']) ? $request['value'] : ''; // == 2607:5300:0060:9389::
        
        $bootstrapIPv6 = 'https://data.iana.org/rdap/ipv6.json';
        $bootstrapARRAY = $this->curl_get_file_contents($bootstrapIPv6);
        $bootstrapARRAY = json_decode($bootstrapARRAY, true);
        
        foreach($bootstrapARRAY['services'] as $key => $services)
            $urls[] = $bootstrapARRAY['services'][$key][1][0];
            
            foreach($urls as $key => $uri):
            //if($key == 2):
            $bootstrapURL = $uri.'ip/'.$ipv6;
            
            $output = $this->curl_get_file_contents($bootstrapURL);
            $output = json_decode($output);
            
            if(isset($output->handle) && !empty($output->handle))
                break;
                //endif;
                
                endforeach;
                
                $info['url'] = $bootstrapURL;
                $info['output'] = $output;
                
                //echo ''.print_r($bootstrapURL,1).'';
                //echo ''.print_r($bootstrap,1).'';
                
                return $info;
    }
    
    
    private function getInfosBootstrap($request = array()) {
        
        $info = $request;
        
        if(isset($request['url']) && !empty($request['url'])) {
            //$output = shell_exec('curl '.$url);
            $info['output'] = $this->curl_get_file_contents($request['url']);
            $info['output'] = json_decode($info['output']);
            
        }
        
        if(empty($info['output']) && !empty($request['url'])) $info['text'] = ' ==> Réponse vide ('.$request['url'].') : soit le numéro d'AS, soit l'adresse IP, soit le Serveur de Nom (NS), soit le Nom de Domaine (DN) est inconnu ou protégé (extension de noms de domaine de pays).';
        
        return $info;
    }
    
    
    public function getInfos($request) {
        
        $request = trim($request);
        
        //$info['text'] = 'Req ==> ';
        
        if( preg_match(
            '#A'
            .'[0-9]{1,3}.+' // 192
            .'[0-9]{1,3}.+' // 168
            .'[0-9]{1,3}.+' // 10
            .'[0-9]{1,3}'// 1
            .'z#'
            , $request)) {
                
                $infos['caption'] = "IPv4";
                $infos['value'] = $request;
                
                // return
                $infos = $this->getInfosIPv4($infos);
                
            }
            else if( preg_match(
                '#A'
                .'[a-zA-Z0-9-]+'
                .'.'
                .'(?:(asso.)|(gouv.))?'
                .'[a-zA-Z]{2,}'
                .'z#'
                , $request)
                ) {
                    
                    $infos['caption'] = 'DN';
                    $infos['value'] = $request;
                    
                    $ext = strrchr($request, '.');
                    $ext = substr($ext, 1, strlen($ext));
                    $ext = strToLower($ext);
                    
                    $infos['ext'] = $ext;
                    
                    // return
                    $infos = $this->getInfosDN($infos);
                    
                }
                else if(substr_count($request, '.') >= '2' &&
                    preg_match('#A[a-zA-Z0-9-.]{8,}?.?z#', $request)
                    ) {
                        
                        $infos['caption'] = 'DNS';
                        
                        $request = preg_match('#A[a-zA-Z0-9-.]{8,}.z#', $request) ? substr($request, 0, strlen($request)-1)  : $request;
                        
                        $infos['value'] = $request;
                        
                        $ext = strrchr($request, '.');
                        $ext = substr($ext, 1, strlen($ext));
                        $ext = strToLower($ext);
                        
                        $infos['ext'] = $ext;
                        
                        // return
                        $infos = $this->getInfosNS($infos);
                        
                    }
                    else if(strlen($request) >= '3' && preg_match('#A(?:(?i)(AS)|ASN)+[0-9]{1,}z#', $request) ) {
                        
                        $infos['caption'] = 'ASN';
                        
                        if(substr($request, 0, 3) == 'ASN')
                            $request = substr($request, 3, strlen($request));
                            elseif(substr($request, 0, 2) == 'AS')
                            $request = substr($request, 2, strlen($request));
                            else
                                $request = null;
                                
                                $infos['value'] = $request;
                                
                                // return
                                $infos = $this->getInfosAS($infos);
                                
                    }
                    else if(
                        preg_match('#[a-fA-F0-9:]#', $request) && strstr($request, ':') && strlen($request) >= 10 && strlen($request) <= 39
                        && (
                            // TODO : A TRUE EREG DETECT IPV6 ;) ^^
                            //(substr_count($request, ':') == '2' && strlen($request) >= 6  && strlen($request) <= 10)
                            (substr_count($request, ':') == '3' && strlen($request) >= 10 && strlen($request) <= 15) // 2001:0bc8::0001
                            || (substr_count($request, ':') == '4' && strlen($request) >= 11  && strlen($request) <= 26) // 2001:bc8:25bb::
                            || (substr_count($request, ':') == '5' && strlen($request) >= 11  && strlen($request) <= 31) // 2001:0bc8:1:ff00::1234
                            || (substr_count($request, ':') == '6' && strlen($request) >= 11  && strlen($request) <= 36) // 2001:bc8:1:0:1::
                            || (substr_count($request, ':') == '7' && strlen($request) >= 13  && strlen($request) <= 39) // 2001:bc8:1:0:1:2::
                            || (substr_count($request, ':') == '8' && strlen($request) >= 13  && strlen($request) <= 35 && preg_match('#:z#', $request)) // 2001:bc8:1:0:1:2::
                            )
                        ) {
                            
                            $infos['caption'] = 'IPv6';
                            
                            $infos['value'] = $request;
                            
                            // return
                            $infos = $this->getInfosIPv6($infos);
                            
                        }
                        else $infos['text'] = 'Error - ';
                        
                        
                        return $infos;
    }
    
    
}
[/php]

Et on fait la demande de renseignement comme suit :

[php]
# Pour afficher les informations au format PHP

$request = 'zw3b.net'; # Domain Name
$request = 'dns.ipv10.net'; # Domain Name Service
$request = 'AS1'; # Autonomous System Number
$request = '158.69.126.137'; # IPv4
$request = '2607:5300:60:9389:15:1:0:1'; # IPv6

$rdap = new zw3bRdap();
$infos = $rdap->getInfos($request);

echo ''.print_r($infos, 1).'';

[/php]

Si cela peut vous servir ;)

NdMoi-même : On peut faire mieux, j'en suis sûr :)

Je précise que les extensions de noms de domaine de pays sont innacessibles pour les personnes, entitées, sites non autorisés (pour le grand public) - Certaines informations sont cachées si vous n'êtes pas une autoritée compétentes.


Voir le projet OpenRDAP, un/le client en ligne de commande pour le protocole d'accès aux données d'enregistrement, écrit en Go.


Cordialement,
Romain





Translate this page with Google

Author of the page

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Firstname : Olivier Romain Luc
  • Lastname : : Jaillet-ramey
  • Arrived on tuesday 19 october 1976 (1976/10/19 00:00)
    44 years activity !

Firefox Nighlty

Our friends from Framasoft are interested in Mozilla and asked them questions about Nightly: Firefox Night-club, free entry !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready