Démarrage rapide
Les exemples de sortie ci-dessous utilisent 192.0.2.1, une adresse réservée à la documentation qui n'appartient jamais à un appareil réel. En lançant ces commandes, vous verrez votre propre IP.
$ curl iseeu.cc
192.0.2.1
$ curl -s iseeu.cc/json | jq '{ip, country: .location.country, asn: .network.asn, tls: .tls.version}'
{
"ip": "192.0.2.1",
"country": "US",
"asn": 7922,
"tls": "TLSv1.3"
}
L'URL d'accueil choisit quoi renvoyer d'après votre en-tête Accept : les navigateurs demandent text/html et reçoivent la page ; curl, wget, HTTPie, PowerShell et les bibliothèques HTTP ne le font pas, et reçoivent une seule ligne contenant votre adresse IP suivie d'un saut de ligne.
Points d'accès
| Chemin | Renvoie |
|---|---|
| / | Votre IP en texte brut (clients autres que les navigateurs) ou la page web (navigateurs) |
| /ip | Votre IP en texte brut, dans tous les cas |
| /json | Tout : IP, localisation, réseau, TLS, HTTP, User-Agent analysé, en-têtes de la requête, heure du serveur |
| /geo | IP, localisation, ASN, organisation et centre de données Cloudflare |
| /tls | Version TLS, suite de chiffrement, taille du ClientHello, empreintes des suites et des extensions, version HTTP |
| /ua | Votre User-Agent, décomposé en navigateur, moteur, système d'exploitation, appareil et type de client |
| /headers | Les en-têtes de requête que vous avez envoyés, et ceux que Cloudflare a ajoutés |
| /api/rdap?q= | Données d'enregistrement RDAP d'un domaine, d'une adresse IP ou d'un bloc CIDR, ou d'un numéro d'AS, obtenues auprès du registre que l'IANA indique pour cette ressource : un résumé plus le JSON RDAP brut |
| /api/headers-check?url= | En-têtes de réponse d'une URL publique (redirections suivies, corps jamais lu) avec une note de sécurité |
| /mcp | Serveur MCP (Streamable HTTP, sans état) — voir plus bas |
Pour voir l'adresse d'un protocole précis, forcez-le dans curl : curl -4 iseeu.cc affiche votre adresse IPv4 et curl -6 iseeu.cc votre adresse IPv6 (la commande échoue aussitôt si votre machine n'a pas de route IPv6) ; cela marche aussi en JSON avec curl -4 iseeu.cc/json et curl -6 iseeu.cc/json.
Ajoutez ?format=text (ou envoyez Accept: text/plain) à n'importe quel endpoint JSON pour obtenir des lignes key: value à plat, pratiques avec grep. format n'accepte que json ou text ; toute autre valeur reçoit une erreur 400 avec "error": "invalid_format", plutôt qu'un repli silencieux. curl "iseeu.cc/ua?format=text" n'affiche que la chaîne User-Agent. La description lisible par une machine se trouve à /openapi.json (OpenAPI 3.1).
L'objet /json
Un exemple de réponse (là encore avec l'adresse d'exemple réservée 192.0.2.1) :
{
"ip": "192.0.2.1",
"ipVersion": 4,
"location": {
"country": "US", "countryName": "United States",
"region": "Texas", "regionCode": "TX", "city": "Austin",
"postalCode": "78701", "metroCode": "635", "continent": "NA",
"isEU": false, "latitude": 30.27, "longitude": -97.74,
"timezone": "America/Chicago"
},
"network": { "asn": 7922, "asOrganization": "Comcast Cable", "colo": "DFW",
"clientTcpRttMs": 22, "clientQuicRttMs": null, "deliveryRateBps": null },
"tls": { "version": "TLSv1.3", "cipher": "AEAD-AES128-GCM-SHA256", "clientHelloLength": 508,
"clientCiphersSha1": "…", "clientExtensionsSha1": "…" },
"http": { "protocol": "HTTP/2", "method": "GET", "priority": null, "acceptEncoding": "gzip, br" },
"userAgent": { "raw": "curl/8.9.1", "browser": {…}, "engine": {…}, "os": {…},
"device": {…}, "cpu": {…}, "kind": "cli", "bot": { "name": "curl", "kind": "cli", "operator": null } },
"headers": { "accept": "*/*", "host": "iseeu.cc", "user-agent": "curl/8.9.1" },
"edgeHeaders": { "cf-ray": "…", "cf-ipcountry": "US", … },
"time": { "server": "2026-10-08T12:00:00.000Z", "serverMs": 1791460800000 },
"meta": { "docs": "https://iseeu.cc/api/", "privacy": "https://iseeu.cc/privacy/", "simulated": false }
}
Les valeurs manquantes valent null et ne sont jamais omises : la structure reste stable. Cela vaut aussi pour les mesures qui ne s'appliquent pas ou qui n'ont pas été faites : clientTcpRttMs n'existe que sur les connexions TCP (HTTP/1.1 et HTTP/2), clientQuicRttMs que sur HTTP/3, et Cloudflare indique une valeur non mesurée par 0, que nous transmettons sous la forme null plutôt que comme un aller-retour de zéro milliseconde. Les données de localisation et de réseau proviennent des informations dont Cloudflare dispose sur l'adresse IP d'où vous vous êtes connecté ; elles décrivent le réseau de votre fournisseur d'accès, pas une adresse postale. tls.clientCiphersSha1 et clientExtensionsSha1 sont des empreintes que Cloudflare calcule à partir de votre ClientHello, pas des JA3 ni des JA4. Chrome mélange l'ordre de ses extensions TLS : son empreinte d'extensions change donc en général d'une connexion à l'autre, et l'empreinte des suites de chiffrement est la plus stable des deux. userAgent.kind vaut browser, search-crawler, ai-crawler, ai-assistant, social-preview, http-library, cli, headless-browser, monitoring, bot ou unknown.
Usages courants
Vérifier qu'un VPN ou un proxy est actif avant de lancer une tâche. Comparez le pays de sortie avec celui attendu et arrêtez-vous s'il ne correspond pas :
country=$(curl -s "iseeu.cc/geo?format=text" | awk -F': ' '$1=="country"{print $2}')
[ "$country" = "DE" ] || { echo "VPN not in Germany (got $country)"; exit 1; }
Trouver l'adresse publique d'un serveur depuis un conteneur, un runner de CI ou une fonction cloud, où l'interface réseau n'affiche qu'une adresse privée. curl -s iseeu.cc suffit, et le saut de ligne final permet de l'utiliser sans risque dans une substitution shell.
Voir ce que votre client HTTP envoie vraiment. Les bibliothèques ajoutent, renomment et réordonnent les en-têtes. Appelez /headers depuis votre code pour voir l'ensemble exact, ou /tls pour confirmer quelle version TLS et quelle suite de chiffrement votre environnement d'exécution négocie.
Depuis d'autres langages :
// JavaScript (browser or Node 18+)
const me = await (await fetch("https://iseeu.cc/json")).json();
# Python
import requests; me = requests.get("https://iseeu.cc/json", timeout=5).json()
// Go
resp, _ := http.Get("https://iseeu.cc/ip")
# PowerShell
(Invoke-RestMethod https://iseeu.cc/json).location.country
Les recherches qui sortent d'iseeu.cc
/api/rdap et /api/headers-check font chacun une requête sortante : ils ont donc leur propre limite, plus basse, de 10 appels par minute et par adresse IP ; au-delà, la réponse est 429 avec Retry-After: 60. Les requêtes RDAP ne partent jamais que vers des serveurs inscrits dans le registre d'amorçage (bootstrap) de l'IANA. La vérification des en-têtes accepte les URL publiques http/https sur les ports 80 et 443, refuse les adresses privées et réservées ainsi qu'iseeu.cc lui-même (y compris comme cible d'une redirection ; c'est alors une erreur 400 invalid_target), suit jusqu'à cinq redirections et abandonne au bout de cinq secondes. Aucun des deux endpoints ne conserve la requête.
curl -s "iseeu.cc/api/rdap?q=AS64496" | jq .summary
curl -s "iseeu.cc/api/headers-check?url=https://example.com/" | jq '.grade | {grade, score}'
Limites et usage raisonnable
- 60 requêtes par minute et par adresse IP. Au-delà, vous recevez
429avecRetry-After: 60. La limite est comptée par centre de données Cloudflare : elle est donc approximative. - Les réponses, y compris celles du serveur MCP, ne sont jamais mises en cache (
Cache-Control: no-store). Les endpoints REST renvoientAccess-Control-Allow-Origin: *: le JavaScript de n'importe quel site peut donc les appeler depuis le navigateur. - L'usage commercial est autorisé. Évitez simplement de placer
/jsonderrière une page que chacun de vos visiteurs charge ; à cette échelle, contactez-nous d'abord. - Si 60 requêtes par minute ne suffisent vraiment pas pour ce que vous construisez, parlez-nous-en via la page de contact.
Serveur MCP pour les agents d'IA
https://iseeu.cc/mcp est un serveur Model Context Protocol distant, accessible en Streamable HTTP. Il fonctionne sans état, ne demande aucune authentification et propose cinq outils, tous en lecture seule ; dns_lookup et rdap_lookup partagent la limite de 10 recherches sortantes par minute.
| Outil | Entrée | Ce qu'il fait |
|---|---|---|
| whoami | include_headers? | IP publique, localisation, ASN et organisation, centre de données Cloudflare, versions TLS et HTTP, et type de client de la machine qui appelle le serveur |
| check_headers | headers? | Signale les traits que la détection de bots pondère souvent : absence de User-Agent ou d'Accept-Language, Chrome sans Client Hints, versions ou plateformes incohérentes, en-têtes de proxy portant une autre IP, DNT et GPC. Ce sont des indices possibles, pas des preuves, puisque n'importe quel client peut omettre ou falsifier des en-têtes. Sans entrée, ce sont les en-têtes de l'appel lui-même qui sont vérifiés. |
| parse_ua | user_agent? | Décompose un User-Agent en navigateur, moteur, système d'exploitation, appareil et processeur, et classe les robots d'indexation, agents d'IA, outils en ligne de commande et bibliothèques |
| dns_lookup | name, type? | Enregistrements A, AAAA, MX, TXT, NS, CNAME, CAA ou SOA via le résolveur de Cloudflare en DNS over HTTPS, avec TTL, indicateur DNSSEC et une note qui distingue un nom inexistant (NXDOMAIN) d'un type d'enregistrement absent |
| rdap_lookup | query, include_raw? | Résumé de l'enregistrement d'un domaine, d'une adresse IP ou d'un numéro d'AS auprès du serveur RDAP qui fait autorité |
Les clients MCP qui tournent dans un navigateur peuvent l'appeler depuis n'importe quelle origine. CORS autorise POST, GET et DELETE avec les en-têtes de requête Content-Type, Mcp-Session-Id, Mcp-Protocol-Version et Last-Event-ID, et expose Mcp-Session-Id. Chaque réponse MCP est envoyée avec Cache-Control: no-store, et le serveur ne garde rien d'un appel à l'autre. Le corps d'une requête peut atteindre 64 Ko et un lot JSON-RPC 10 messages ; au-delà, la requête est refusée avec l'erreur -32600 avant qu'aucun outil ne s'exécute.
Connexion
# Claude Code
claude mcp add --transport http iseeu https://iseeu.cc/mcp
# Cursor, Windsurf, VS Code and other JSON configs
{ "mcpServers": { "iseeu": { "url": "https://iseeu.cc/mcp" } } }
Une précision honnête sur whoami : il décrit la machine, quelle qu'elle soit, qui envoie la requête HTTP à /mcp. Pour les agents de bureau et en ligne de commande, c'est votre propre réseau, ce qui permet de vérifier qu'un proxy ou un VPN est bien actif. Pour les assistants qui tournent dans le cloud, c'est le serveur du fournisseur.
Fichiers de découverte
- /llms.txt — un court guide en texte brut pour les modèles de langage
- /.well-known/mcp/server-card.json — la fiche du serveur MCP (server card)
- /openapi.json — la description OpenAPI 3.1 des endpoints HTTP
Confidentialité
L'API ne journalise jamais les adresses IP, les en-têtes ni les requêtes, et n'a pas de base de données. Les réponses sont construites en mémoire à partir de la requête, puis effacées ; nous comptons les appels par endpoint, sans adresse IP. Les détails figurent dans la politique de confidentialité.
L'API est fournie en l'état, sans garantie de disponibilité. Les données de localisation et de réseau peuvent être fausses. Ne vous en servez pas comme seul critère pour des décisions de sécurité ou de lutte contre la fraude.