More

    Comment récupérer l’adresse IP des visiteurs derrière CloudFlare?

    Introduction

    Vous avez un site web ou une application web et vous souhaitez récupérer l’adresse IP des visiteurs?

    Problème? Vous utilisez CloudFlare et quand vous utilisez la variable $_SERVER['REMOTE_ADDR'] vous récupérez l’adresse IP des Cloudflare et pas celle du visiteur.

    Dans cet article, nous allons voir ensembles la marche à suivre pour récupérer l’adresse IP réel du visiteur.

    Explication du fonctionnement de CloudFlare

    Lorsque vous utilisé Cloudflare en mode proxy, pour protéger un site web, l’adresse IP du visiteur est généralement masquée par Cloudflare. Toutefois, Cloudflare fournit des en-têtes HTTP spéciale appelée « CF-Connecting-IP » qui contient l’adresse IP réelle du visiteur.

    Vous pouvez récupérer cette adresse IP en examinant les en-têtes HTTP de la requête. Dans la plupart des langages de programmation, vous pouvez récupérer les en-têtes HTTP à l’aide d’une variable ou d’une fonction.

    Récupération de l’entête CF-Connecting-IP avec PHP:

    Voici un exemple de code en PHP pour récupérer l’adresse IP réelle à partir de l’en-tête « CF-Connecting-IP » :

    $ip_address = $_SERVER['HTTP_CF_CONNECTING_IP'];

    Dans cet exemple, nous enregistrons dans la variable ip_address la valeur de l’entête HTTP « CF-Connecting-IP ».

    Récupération de l’entête CF-Connecting-IP avec Python:

    En Python, nous pouvons récupérer l’adresse IP réelle à partir de l’en-tête « CF-Connecting-IP » en accédant à l’en-tête à l’aide de la bibliothèque requests ou en accédant à la variable d’environnement dans le module os.

    Voici un exemple de code qui utilise la bibliothèque requests pour récupérer l’adresse IP à partir de l’en-tête « CF-Connecting-IP » :

    import requests
    
    url = 'https://www.example.com'
    headers = {'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate, br'}
    
    response = requests.get(url, headers=headers)
    
    ip_address = response.headers.get('CF-Connecting-IP')
    print(ip_address)

    Dans ce code en python, nous utilisons la méthode get de la bibliothèque requests pour envoyer une requête GET à l’URL spécifié avec les en-têtes spécifiés. Nous avons ensuite récupéré l’en-tête « CF-Connecting-IP » à l’aide de la méthode headers.get de l’objet réponse.

    Il existe également une autre méthode avec le module os:

    import os
    
    ip_address = os.environ.get('HTTP_CF_CONNECTING_IP')
    print(ip_address)

    Ici, nous utilisons la méthode environ.get du module os pour récupérer la valeur de la variable d’environnement « HTTP_CF_CONNECTING_IP ».

    Récupération de l’entête CF-Connecting-IP avec Javascript:

    Comme pour PHP et Python, il est aussi possible de lire l’entête « CF-Connecting-IP » avec Javascript.

    Nous pouvons récupérer l’adresse IP réelle à l’aide de l’objet fetch ou de l’objet XMLHttpRequest.

    Voici un exemple de code qui utilise l’objet fetch pour récupérer l’adresse IP à partir de l’en-tête « CF-Connecting-IP » :

    fetch('https://www.example.com', {
      headers: {
        'User-Agent': 'Mozilla/5.0',
        'Accept-Encoding': 'gzip, deflate, br'
      }
    })
    .then(response => {
      const ip_address = response.headers.get('CF-Connecting-IP');
      console.log(ip_address);
    })
    .catch(error => {
      console.error(error);
    });

    Dans ce code, nous utilisons l’objet fetch pour envoyer une requête GET à l’URL spécifié avec les en-têtes spécifiés. Nous avons ensuite récupéré l’en-tête « CF-Connecting-IP » à l’aide de la méthode headers.get de l’objet réponse.

    Nous pouvons sinon utiliser l’objet XMLHttpRequest pour récupérer l’adresse IP, vous pouvez utiliser le code suivant :

    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://www.example.com', true);
    xhr.setRequestHeader('User-Agent', 'Mozilla/5.0');
    xhr.setRequestHeader('Accept-Encoding', 'gzip, deflate, br');
    xhr.onreadystatechange = function() {
      if (xhr.readyState === XMLHttpRequest.DONE) {
        const ip_address = xhr.getResponseHeader('CF-Connecting-IP');
        console.log(ip_address);
      }
    };
    xhr.send();

    Dans ce dernier code, nous utilisons la méthode setRequestHeader de l’objet XMLHttpRequest pour définir les en-têtes de la requête, et la méthode getResponseHeader pour récupérer l’en-tête « CF-Connecting-IP » de la réponse.

    Nous arrivons à la fin de cet article. Maintenant, vous avez les clés pour récupérer l’adresse IP derrière CloudFlare. Merci à ChatGPT qui m’a aidé à compléter la partie Javascript ;).

    Offrez-moi un café 😉

    Jonathan
    Jonathanhttps://pratiquepc.fr/
    Technicien, responsable atelier dans une ESN (Entreprise de services du numérique) de la région Paloise (64). Fondateur de Pratique PC. Je souhaite partager ma passion et mon expérience.

    Laisser un commentaire

    Saisissez votre commentaire
    Saisissez votre nom

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

    Derniers Articles

    Suivez-nous!

    145FansJ'aime
    56SuiveursSuivre
    140SuiveursSuivre
    7,660AbonnésS'abonner