Fonctionnalités
Voici la liste des fonctionnalités de Maigret.
Interface web
Vous pouvez lancer Maigret avec une interface web, où vous pouvez consulter le graphe des résultats et télécharger les rapports dans tous les formats depuis une seule page.
Marche à suivre :
Lancez Maigret avec l’option
--weben précisant le numéro de port.
maigret --web 5000
Ouvrez http://127.0.0.1:5000 dans votre navigateur et saisissez un ou plusieurs noms d’utilisateur pour lancer une recherche.
Patientez le temps que la recherche se termine, puis consultez le graphe des résultats, le tableau de tous les comptes trouvés, et téléchargez les rapports dans tous les formats.
Bot Telegram
Un bot Telegram maintenu par la communauté permet d’utiliser Maigret sans rien installer en local.
Instance en service : maigret.app/docs-en (redirection, car le bot hébergé peut changer d’hébergeur).
Code source : github.com/soxoj/maigret-tg-bot.
Collecte d’informations personnelles
Maigret effectue l”analyse des pages de comptes et l’extraction des informations personnelles, des liens vers d’autres profils, etc. Les informations extraites apparaissent comme résultat complémentaire dans la sortie en ligne de commande, et sous forme de tableaux dans les rapports HTML et PDF. Maigret utilise également les identifiants et noms d’utilisateur trouvés dans les liens pour lancer une recherche récursive.
Activée par défaut, désactivable avec --no extracting.
$ python3 -m maigret soxoj --timeout 5
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username soxoj on:
...
[+] GitHub: https://github.com/soxoj
├─uid: 31013580
├─image: https://avatars.githubusercontent.com/u/31013580?v=4
├─created_at: 2017-08-14T17:03:07Z
├─location: Amsterdam, Netherlands
├─follower_count: 1304
├─following_count: 54
├─fullname: Soxoj
├─public_gists_count: 3
├─public_repos_count: 88
├─twitter_username: sox0j
├─bio: Head of OSINT Center of Excellence in @SocialLinks-IO
├─is_company: Social Links
└─blog_url: soxoj.com
...
Recherche récursive
Maigret est capable d’examiner les pages de comptes à la recherche d”identifiants courants et de noms d’utilisateur présents dans les liens. Lorsque les gens incluent des liens vers leurs autres comptes de réseaux sociaux, Maigret peut les détecter automatiquement et lancer de nouvelles recherches sur ces profils. Tout ce qui est découvert par ce biais apparaît à la fois dans la sortie en ligne de commande et dans les rapports générés.
Activée par défaut, désactivable avec --no-recursion.
$ python3 -m maigret soxoj --timeout 5
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username soxoj on:
...
[+] GitHub: https://github.com/soxoj
├─uid: 31013580
├─image: https://avatars.githubusercontent.com/u/31013580?v=4
├─created_at: 2017-08-14T17:03:07Z
├─location: Amsterdam, Netherlands
├─follower_count: 1304
├─following_count: 54
├─fullname: Soxoj
├─public_gists_count: 3
├─public_repos_count: 88
├─twitter_username: sox0j <===== another username found here
├─bio: Head of OSINT Center of Excellence in @SocialLinks-IO
├─is_company: Social Links
└─blog_url: soxoj.com
...
Searching |████████████████████████████████████████| 500/500 [100%] in 9.1s (54.85/s)
[-] You can see detailed site check errors with a flag `--print-errors`
[*] Checking username sox0j on:
[+] Telegram: https://t.me/sox0j
├─fullname: @Sox0j
...
Permutations de noms d’utilisateur
Maigret peut générer des permutations de noms d’utilisateur. Il suffit de passer plusieurs noms d’utilisateur en ligne de commande et d’ajouter l’option --permute. Merci à @balestek pour l’idée et son implémentation.
$ python3 -m maigret --permute hope dream --timeout 5
[-] 12 permutations from hope dream to check...
├─ hopedream
├─ _hopedream
├─ hopedream_
├─ hope_dream
├─ hope-dream
├─ hope.dream
├─ dreamhope
├─ _dreamhope
├─ dreamhope_
├─ dream_hope
├─ dream-hope
└─ dream.hope
[-] Starting a search on top 500 sites from the Maigret database...
[!] You can run search by full list of sites with flag `-a`
[*] Checking username hopedream on:
...
Rapports
Maigret prend actuellement en charge les rapports HTML, PDF, TXT, CSV, carte mentale XMind 8, JSON et Markdown, ainsi que les exports de graphe : un graphe HTML interactif (--graph) et un script Cypher pour Neo4j (--neo4j), qui charge les résultats dans une base de données orientée graphe.
Les rapports HTML et PDF contiennent :
la photo de profil
toutes les informations personnelles collectées
des informations complémentaires sur les données personnelles supposées (nom complet, genre, localisation), déduites des statistiques de l’ensemble des comptes trouvés
Un court rapport textuel est également affiché en ligne de commande à la fin de la phase de recherche.
L’option --neo4j sérialise le graphe construit par --graph dans un script .cypher idempotent, importable avec cypher-shell ou le Neo4j Browser. Voir Export Neo4j pour le schéma et les instructions d’import.
Avertissement
Les cartes mentales XMind 8 sont incompatibles avec XMind 2022 !
Analyse par IA
Avec l’option --ai, Maigret peut produire une courte synthèse d’enquête lisible, en plus des résultats bruts de la recherche. Il construit le rapport Markdown interne, l’envoie à un point d’entrée de complétion de conversation compatible OpenAI, et diffuse la réponse du modèle directement dans le terminal.
export OPENAI_API_KEY=sk-...
maigret username --ai
La synthèse suit un format fixe : nom réel le plus probable, localisation, profession, centres d’intérêt, langues, site web principal, variantes de nom d’utilisateur, nombre de plateformes, années d’activité, un indice de confiance et une courte liste de pistes à creuser. Tant que --ai est actif, la progression site par site et le court rapport textuel sont masqués, afin que la synthèse diffusée reste la sortie principale.
Le point d’entrée, le modèle et la clé d’API se configurent via settings.json (openai_api_key, openai_model, openai_api_base_url) ou via la variable d’environnement OPENAI_API_KEY. N’importe quelle API compatible OpenAI convient (Azure OpenAI, OpenRouter, un serveur local, etc.). Voir Analyse par IA (intégrée) et Paramètres pour les détails.
Détection de la censure et des captchas
Maigret sait repérer les erreurs courantes : pages de blocage liées à la censure, pages de captcha CloudFlare, et d’autres encore. Si plus de 3 % des résultats d’une session relèvent d’un même type d’erreur, un avertissement s’affiche en ligne de commande, avec des recommandations pour améliorer les performances et éviter les problèmes.
Nouvelles tentatives
Maigret réessaie les requêtes ayant rencontré une erreur temporaire (échec de connexion, erreur de proxy, etc.).
Une tentative par défaut, modifiable avec l’option --retries N.
Auto-vérification de la base
Maigret dispose d’un mode d’auto-vérification (--self-check) qui valide chaque site de la base : il recherche les noms d’utilisateur connus comme existants et comme inexistants, puis vérifie que les résultats de détection correspondent aux attentes.
L’auto-vérification est résistante aux erreurs : si la vérification d’un site déclenche une exception inattendue (erreur réseau, échec d’analyse, etc.), l’erreur est capturée, journalisée et enregistrée comme un problème, et les sites restants continuent d’être vérifiés sans interruption. Le processus va donc toujours jusqu’au bout, même en vérifiant des centaines de sites avec -a --self-check.
Utilisez --auto-disable avec --self-check pour désactiver automatiquement les sites qui échouent. Sans cette option, les problèmes sont seulement signalés. Utilisez --diagnose pour afficher un diagnostic détaillé par site, comprenant le type de vérification, les problèmes précis et des recommandations.
# Report-only mode (no changes to the database)
maigret --self-check
# Automatically disable failing sites and save updates
maigret -a --self-check --auto-disable
# Show detailed diagnosis for each failing site
maigret -a --self-check --diagnose
Vérification des archives et des miroirs
La base de Maigret contient non seulement les sites d’origine, mais aussi des miroirs, des archives et des agrégateurs. Par exemple :
Picuki, un miroir d’Instagram
(n’est plus disponible) la recherche Reddit BigData
(n’est plus disponible) le vérificateur de shadowban Twitter
Cela permet d’obtenir des informations supplémentaires sur la personne et de vérifier l’existence du compte même lorsque le site principal est inaccessible (protection anti-bot, captcha, etc.)
Contournement du webgate Cloudflare
Avertissement
Fonctionnalité expérimentale. Le webgate Cloudflare est en cours de développement actif. Le schéma de configuration, le comportement de l’option en ligne de commande et l’ensemble des sites qui y sont routés peuvent changer sans garantie de compatibilité ascendante. Attendez-vous à quelques aspérités (limites de débit CF, échecs occasionnels du solveur) et signalez les problèmes pour qu’ils puissent être corrigés.
Certains sites sont protégés par un défi JavaScript Cloudflare complet ou par un blocage ferme du pare-feu CF : ils portent protection: ["cf_js_challenge"] ou protection: ["cf_firewall"] dans la base et sont normalement désactivés, car ni aiohttp ni curl_cffi ne savent résoudre seuls le défi JavaScript.
Maigret peut déléguer ces vérifications à un solveur local basé sur Chrome. Deux backends sont pris en charge, configurés dans settings.json sous cloudflare_bypass.modules (le premier module joignable l’emporte ; les suivants forment une chaîne de repli) :
FlareSolverr (recommandé). Fait tourner une véritable instance de Chrome et expose une API JSON. Le statut HTTP en amont, les en-têtes et l’URL finale sont préservés : les vérifications
checkType: status_codeetcheckType: response_urlcontinuent donc de fonctionner à travers le contournement.docker run -d -p 8191:8191 --name flaresolverr ghcr.io/flaresolverr/flaresolverr:latestCloudflareBypassForScraping (repli hérité). Ne renvoie que du HTML rendu : le code de statut en amont est perdu. Les vérifications
checkType: messagecontinuent de fonctionner, mais celles de typestatus_codese déclenchent à tort (un succès est traité comme un 200).
Activez le contournement soit avec l’option de ligne de commande
maigret --cloudflare-bypass <username>
soit en mettant cloudflare_bypass.enabled à true dans settings.json. L’interface web (python -m maigret.web.app) lit le même paramètre : il n’y a pas d’interrupteur distinct dans le formulaire, c’est donc bien enabled qui active le contournement pour les recherches lancées depuis le navigateur.
Le contournement ne se déclenche que pour les sites dont le champ protection recoupe cloudflare_bypass.trigger_protection (par défaut ["cf_js_challenge", "cf_firewall", "webgate"]) ; tous les autres sites empruntent le chemin habituel, aiohttp / curl_cffi.
Si aucun des modules configurés n’est joignable, les sites concernés reçoivent le statut UNKNOWN, accompagné d’une erreur explicite pointant vers l’URL du premier module : le remède consiste presque toujours à démarrer le conteneur FlareSolverr.
La réutilisation des sessions FlareSolverr est automatique : Maigret fixe une seule session: <session_prefix>-<pid> par exécution, si bien que les cookies cf_clearance sont partagés entre les vérifications d’un même domaine (5 à 10 fois plus rapide pour les requêtes suivantes vers cet hôte).
Activation
Le mécanisme d’activation permet d’interroger les sites qui exigent une authentification supplémentaire : cookies, jetons JWT ou en-têtes personnalisés.
Il repose sur une fonction dédiée qui :
Envoie une requête HTTP spécifique à un point d’entrée précis du site
Traite la réponse
Met à jour les en-têtes et les cookies de ce site dans la base locale de Maigret
Comme l’activation ne se déclenche qu’après certaines erreurs, il faut une nouvelle tentative (ou une nouvelle exécution de Maigret) pour obtenir une réponse valide avec l’authentification mise à jour.
Le mécanisme d’activation est activé par défaut et ne peut pas être désactivé pour l’instant.
Plus de détails dans la section Développement : Mécanisme d’activation.
Extraction d’informations depuis les pages de comptes
Maigret peut analyser des URL et le contenu des pages web correspondantes pour en extraire des informations sur le titulaire du compte, ainsi que d’autres métadonnées.
Vous devez indiquer l’URL avec l’option --parse ; ce peut être un lien vers un compte ou vers un document en ligne. La liste des sites pris en charge est consultable ici.
Une fois la phase d’analyse terminée, Maigret lance la phase de recherche à partir des identifiants pris en charge qu’il a trouvés (noms d’utilisateur, identifiants, etc.).
$ maigret --parse https://docs.google.com/spreadsheets/d/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw/edit\#gid\=0
Scanning webpage by URL https://docs.google.com/spreadsheets/d/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw/edit#gid=0...
┣╸org_name: Gooten
┗╸mime_type: application/vnd.google-apps.ritz
Scanning webpage by URL https://clients6.google.com/drive/v2beta/files/1HtZKMLRXNsZ0HjtBmo0Gi03nUPiJIA4CC4jTYbCAnXw?fields=alternateLink%2CcopyRequiresWriterPermission%2CcreatedDate%2Cdescription%2CdriveId%2CfileSize%2CiconLink%2Cid%2Clabels(starred%2C%20trashed)%2ClastViewedByMeDate%2CmodifiedDate%2Cshared%2CteamDriveId%2CuserPermission(id%2Cname%2CemailAddress%2Cdomain%2Crole%2CadditionalRoles%2CphotoLink%2Ctype%2CwithLink)%2Cpermissions(id%2Cname%2CemailAddress%2Cdomain%2Crole%2CadditionalRoles%2CphotoLink%2Ctype%2CwithLink)%2Cparents(id)%2Ccapabilities(canMoveItemWithinDrive%2CcanMoveItemOutOfDrive%2CcanMoveItemOutOfTeamDrive%2CcanAddChildren%2CcanEdit%2CcanDownload%2CcanComment%2CcanMoveChildrenWithinDrive%2CcanRename%2CcanRemoveChildren%2CcanMoveItemIntoTeamDrive)%2Ckind&supportsTeamDrives=true&enforceSingleParent=true&key=AIzaSyC1eQ1xj69IdTMeii5r7brs3R90eck-m7k...
┣╸created_at: 2016-02-16T18:51:52.021Z
┣╸updated_at: 2019-10-23T17:15:47.157Z
┣╸gaia_id: 15696155517366416778
┣╸fullname: Nadia Burgess
┣╸email: nadia@gooten.com
┣╸image: https://lh3.googleusercontent.com/a-/AOh14GheZe1CyNa3NeJInWAl70qkip4oJ7qLsD8vDy6X=s64
┗╸email_username: nadia
$ maigret.py --parse https://steamcommunity.com/profiles/76561199113454789
Scanning webpage by URL https://steamcommunity.com/profiles/76561199113454789...
┣╸steam_id: 76561199113454789
┣╸nickname: Pok
┗╸username: Machine42
Une API simple
Maigret s’intègre facilement grâce au paquet Python maigret.
Exemple : le bot Telegram communautaire