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 ;).