Hypertext Preprocessor

 Charge moyenne sur 1mn : 0.93 Charge moyenne sur 5mn : 0.86 Charge moyenne sur 15mn : 0.66


PHP

PHP est un langage de script d'usage général populaire qui est particuliérement adapté au développement web.

Rapide, flexible et pragmatique, le PHP est fait pour tout blog ou pour tous sites les plus populaires dans le monde.

Le mot PHP ou langage de programmation contenu dans des pages Web et exécuté sur les serveurs, ils renvoient directement le résultat vers le client qui ne peut jamais voir la source. Permet de créer des pages Web dynamique.

PHP.Net © 2001-2020 The PHP Group : Référence du Language

Classes PHP prédéfinies pour nous faciliter la Vie :)






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

Identifiez-vous

Authentifiez-vous avec votre compte ZW3B et profitez des services membres.

Identifiant :
Mot de passe :
  
  

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
  • Publication : Samedi 17 octobre 2020
  • Modification : Samedi 17 octobre 2020

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





Autheur de la page

LAB3W.ORJ

LAB3W.ORJ

  • Prénom : Olivier Romain Luc
  • Nom : Jaillet-ramey
  • Arrivé le mardi 19 octobre 1976 (1976/10/19 00:00)
    44 ans d'activité !

Firefox Nighlty

Nos amis de Framasoft s'intéressent à Mozilla et leur ont posé des questions à propos de Nightly : Firefox Night-club, entrée libre !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready