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.

Interface web : comment la démarrer Interface web : les résultats

Marche à suivre :

  1. Lancez Maigret avec l’option --web en précisant le numéro de port.

maigret --web 5000
  1. Ouvrez http://127.0.0.1:5000 dans votre navigateur et saisissez un ou plusieurs noms d’utilisateur pour lancer une recherche.

  2. 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.

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

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.

Tags

La base de sites de Maigret est très grande (et continuera de grandir) : lancer une recherche sur tous les sites est parfois excessif. De plus, il est souvent difficile de savoir quels sites nous intéressent vraiment dans le cas d’une personne donnée.

Le balisage par tags permet de sélectionner un sous-ensemble de sites par centre d’intérêt (photo, messagerie, finance, etc.) ou par pays. Les tags des comptes trouvés sont regroupés et affichés dans les rapports.

Voir la description complète sur la page Tags.

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 :

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_code et checkType: response_url continuent donc de fonctionner à travers le contournement.

    docker run -d -p 8191:8191 --name flaresolverr ghcr.io/flaresolverr/flaresolverr:latest
    
  • CloudflareBypassForScraping (repli hérité). Ne renvoie que du HTML rendu : le code de statut en amont est perdu. Les vérifications checkType: message continuent de fonctionner, mais celles de type status_code se 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 :

  1. Envoie une requête HTTP spécifique à un point d’entrée précis du site

  2. Traite la réponse

  3. 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