Options de ligne de commande
Noms d’utilisateur
maigret nomdutilisateur1 nomdutilisateur2 ...
Vous pouvez indiquer plusieurs noms d’utilisateur séparés par des espaces. Les noms d’utilisateur ne sont pas obligatoires, car il existe d’autres modes de fonctionnement (voir plus bas).
Identifiants depuis un fichier
maigret --input-file ids.txt
Lit les identifiants depuis un fichier, un par ligne, et les recherche exactement comme des arguments positionnels. Un simple - comme chemin lit l’entrée standard à la place, ce qui permet de brancher directement un générateur. Les lignes vides et celles commençant par # sont ignorées.
Chaque ligne est recherchée avec le type indiqué par --id-type, qui vaut username tant que vous ne le changez pas. Une ligne peut aussi porter son propre type sous la forme d’un préfixe id_type:valeur : c’est ainsi qu’une seule exécution peut mélanger des noms d’utilisateur et des identifiants de réseaux sociaux.
Par exemple, ids.txt :
# usernames from a generator
john
jsmith
john.smith
# ids of a known type
vk_id:12345
gaia_id:109876543210
Lancez ensuite Maigret dessus :
maigret --input-file ids.txt --html
Chaque ligne est recherchée avec le type que Maigret a retenu pour elle, et ce type est affiché au fil de l’exécution :
[*] Checking username john on:
[*] Checking username jsmith on:
[*] Checking username john.smith on:
[*] Checking vk_id 12345 on:
[*] Checking gaia_id 109876543210 on:
Un générateur peut aussi être branché directement, sans fichier intermédiaire :
./generate-usernames.py john.smith | maigret --input-file - --html
Mélanger les types en une seule exécution a un intérêt : tout ce qui est trouvé atterrit dans un seul rapport et un seul graphe de connexions, alors que des exécutions séparées en produisent autant de séparés.
À noter : --permute ne s’applique qu’aux noms d’utilisateur passés en arguments positionnels. Les noms venant d’un fichier sont recherchés tels qu’ils sont écrits, car un fichier peut contenir des milliers de lignes et en permuter le contenu est rarement ce que l’on veut.
Analyse des pages de comptes et des documents en ligne
maigret --parse URL
Maigret tentera d’extraire des informations sur le titulaire du document ou du compte (dont son nom d’utilisateur et d’autres identifiants), puis lancera une recherche à partir du nom d’utilisateur et des identifiants extraits. Voir les exemples dans la section Extraction d’informations depuis les pages de comptes.
Options principales
Les options sont également configurables via des fichiers de paramètres, voir la section Paramètres.
--tags - Filtre les sites de la recherche par tags : catégories de sites et codes pays à deux lettres (pas une langue !). Par exemple photo, dating, sport ; jp, us, global. Plusieurs tags peuvent être associés à un même site. Attention : le balisage par tags n’est pas encore stable. Plus de détails dans la section dédiée.
--exclude-tags - Exclut de la recherche les sites portant certains tags (liste noire). Par exemple, --exclude-tags porn,dating ignorera tous les sites marqués porn ou dating. Peut se combiner avec --tags pour inclure certaines catégories tout en en excluant d’autres. Plus de détails dans la section dédiée.
-n, --max-connections - Nombre de connexions simultanées autorisées (par défaut : 100).
-a, --all-sites - Utilise tous les sites pour la recherche (par défaut : les 500 premiers).
--top-sites - Nombre de sites à parcourir, classés selon Majestic Million (par défaut : les 500 premiers).
Miroirs : une fois choisis les N premiers sites au classement Majestic Million (en respectant --tags, --use-disabled-sites, etc.), Maigret peut ajouter des sites supplémentaires dont le champ source de la base désigne une plateforme parente qui figure elle-même dans les N premiers du Majestic Million, sites désactivés inclus dans ce classement. Par exemple, si Twitter figure dans les 500 premiers du Majestic Million, un miroir comme memory.lol (avec source: Twitter) est inclus, alors même qu’il n’a aucun rang et serait autrement écarté. Il en va de même pour les miroirs liés à Instagram (Picuki, par exemple) lorsque Instagram fait partie de ces N premiers par rang : même si l’entrée officielle Instagram est désactivée et n’est pas parcourue par défaut, ses miroirs peuvent quand même être tirés. La liste finale est donc celle des N premiers au classement, plus ces miroirs (sans limite supérieure fixe sur le nombre de miroirs).
--timeout - Temps d’attente (en secondes) des réponses des sites (par défaut : 30). Un délai plus long donne plus de chances d’obtenir des résultats des sites lents. En contrepartie, cela peut allonger considérablement la collecte de tous les résultats. Le bon délai se choisit en tenant compte du débit de la connexion internet.
Options de réseau et de proxy
--proxy URL_PROXY / -p URL_PROXY - Fait passer toutes les vérifications par le proxy HTTP ou SOCKS indiqué. Exemples : socks5://127.0.0.1:1080, http://user:pass@proxy.example:3128. C’est l’option à utiliser pour faire passer toute la recherche par Tor (--proxy socks5://127.0.0.1:9050), par un proxy résidentiel ou par n’importe quelle passerelle d’entreprise. Aucune valeur par défaut.
socks5:// et socks5h:// sont interchangeables : Maigret réécrit le schéma dans la forme attendue par le transport qui traite chaque site, de sorte que l’un comme l’autre résout les noms d’hôte au niveau du proxy pour toute la base.
--tor-proxy URL_PROXY_TOR - Passerelle utilisée uniquement pour les sites .onion de la base (par défaut : socks5://127.0.0.1:9050). Les sites du web classique ne sont pas concernés : pour eux, Maigret utilise votre connexion directe, ou --proxy si vous en avez défini un. Sans cette option, les sites .onion sont silencieusement ignorés.
--i2p-proxy URL_PROXY_I2P - Passerelle utilisée uniquement pour les sites .i2p de la base (par défaut : http://127.0.0.1:4444). Même règle de « protocole correspondant uniquement » que pour --tor-proxy.
Maigret ne démarre ni le démon Tor ni le routeur I2P à votre place : lancez-le d’abord. Pour une explication complète (ports de Tor Browser et du tor système, recette pour Tails OS, réglage des délais et des nouvelles tentatives), voir Tor, I2P et proxys.
--cookies-jar-file - Fichier de cookies personnalisés au format Netscape (alias cookies.txt). Vous pouvez installer une extension dans votre navigateur pour télécharger vos propres cookies (Chrome, Firefox).
--no-recursion - Désactive l’analyse des pages à la recherche d’autres noms d’utilisateur, ainsi que la recherche récursive à partir de ceux-ci.
--use-disabled-sites - Utilise également les sites désactivés pour la recherche (risque de nombreux faux positifs).
--id-type - Précise le type des identifiants (username par défaut). Types pris en charge : gaia_id, steam_id, vk_id, yandex_public_id, ok_id, wikimapia_uid, uidme_uguid, yelp_userid, orcid, qq_id, bilibili_id. Les sites dont le type ne correspond pas sont écartés automatiquement. Voir Types d’identifiants pris en charge pour les détails et un exemple.
--input-file - Lit les identifiants depuis un fichier, un par ligne. Voir Identifiants depuis un fichier ci-dessus.
--ignore-ids - Ne pas rechercher le nom d’utilisateur ou les identifiants indiqués. Utile pour relancer un scan en écartant des noms d’utilisateur déjà identifiés comme hors sujet.
--db - Charge la base de Maigret depuis un fichier JSON local ou un fichier JSON valide en ligne. Voir Utiliser une base de sites personnalisée ci-dessous.
--no-autoupdate - Désactive la vérification automatique des mises à jour de la base au démarrage. La base actuellement en cache (ou embarquée) est utilisée telle quelle.
--force-update - Force une vérification des mises à jour de la base au démarrage, sans tenir compte de l’intervalle habituel. Implique --no-autoupdate pour le reste de l’exécution, une fois la mise à jour explicite terminée.
--retries RETRIES - Nombre de tentatives de relance des requêtes ayant échoué temporairement.
--with-domains (expérimental) - Résout également par DNS (enregistrements A) un petit ensemble de motifs {username}.<tld>, en parallèle des vérifications HTTP habituelles. Actuellement, 7 entrées de la base empruntent ce chemin (.ddns.net, .com, .pro, .me, .biz, .email, .guru). Un résultat purement DNS peut correspondre à un domaine parqué ou à un joker attrape-tout : traitez-le comme une piste, pas comme une confirmation. Voir l”entrée de la FAQ sur les vérifications DNS.
--cloudflare-bypass (expérimental) - Fait passer les vérifications des sites marqués protection: ["cf_js_challenge"] / ["cf_firewall"] / ["webgate"] par un solveur local basé sur Chrome (FlareSolverr par défaut). Le contournement est facultatif : sans cette option (ou sans settings.cloudflare_bypass.enabled = true), ces sites sont vérifiés de la façon habituelle, ce que Cloudflare bloque presque toujours ; vous obtenez alors un statut UNKNOWN avec une erreur de défi JavaScript ou de pare-feu, plutôt qu’un vrai résultat. Le backend se configure dans settings.cloudflare_bypass.modules. Voir Contournement du webgate Cloudflare. Expérimental : l’option, le schéma et les règles de routage peuvent changer sans garantie de compatibilité ascendante.
Utiliser une base de sites personnalisée
L’option --db accepte trois formes :
Une URL HTTP(S) — récupérée telle quelle, par exemple
--db https://example.com/ma_base.json.Un chemin de fichier local — absolu (
--db /tmp/private.json) ou relatif au répertoire de travail courant (--db LLM/maigret_private_db.json).Un chemin relatif au module — conservé pour la compatibilité ascendante, résolu par rapport au répertoire du paquet
maigret/installé (par exemple leresources/data.jsonpar défaut).
Ordre de résolution des chemins locaux : le chemin est d’abord essayé tel quel (absolu ou relatif au répertoire courant) ; si ce fichier n’existe pas, Maigret se rabat sur l’ancienne résolution relative au module. Si le fichier ne se trouve à aucun de ces endroits, Maigret s’arrête sur une erreur plutôt que de charger silencieusement la base embarquée.
Lorsque --db désigne un fichier personnalisé, les mises à jour automatiques de la base sont ignorées : le fichier est utilisé exactement tel qu’il est fourni.
À chaque exécution, Maigret affiche la base qu’il a réellement chargée, par exemple
[+] Using sites database: /path/to/maigret_private_db.json (6 sites)
Si le chargement de la base demandée échoue pour une autre raison (JSON corrompu, clés obligatoires manquantes, etc.), Maigret affiche un avertissement, se rabat sur la base embarquée et signale explicitement ce repli
[-] Falling back to bundled database: /…/maigret/resources/data.json
[+] Using sites database: /…/maigret/resources/data.json (<N> sites)
Un appel typique sur une base privée, avec la mise à jour automatique désactivée et tous les sites parcourus, ressemble à ceci
python3 -m maigret username \
--db LLM/maigret_private_db.json \
--no-autoupdate -a
Rapports
-P, --pdf - Génère un rapport PDF (rapport global sur tous les noms d’utilisateur).
-H, --html - Génère un rapport HTML (rapport global sur tous les noms d’utilisateur).
-X, --xmind - Génère une carte mentale XMind au format XML hérité, avec un manifeste pour les lecteurs récents (un rapport par nom d’utilisateur).
-C, --csv - Génère un rapport CSV (un rapport par nom d’utilisateur).
-T, --txt - Génère un rapport TXT (un rapport par nom d’utilisateur).
-J, --json - Génère un rapport JSON du type indiqué : simple, ndjson (un rapport par nom d’utilisateur). Par exemple --json ndjson
-M, --md - Génère un rapport Markdown (rapport global sur tous les noms d’utilisateur). Voir Rapport Markdown (adapté aux LLM) ci-dessous.
--neo4j - Génère un rapport Cypher pour Neo4j : un script .cypher qui recrée le graphe de Maigret (celui-là même que produit --graph) dans une base Neo4j, importable avec cypher-shell ou le Neo4j Browser (rapport global sur tous les noms d’utilisateur). Voir Export Neo4j ci-dessous.
--ai - Lance une analyse des résultats par IA via une API de complétion de conversation compatible OpenAI. Le rapport Markdown interne est envoyé au modèle, qui renvoie une courte synthèse d’enquête, diffusée au fil de l’eau dans le terminal. Voir Analyse par IA (intégrée) ci-dessous.
--ai-model - Nom du modèle à utiliser avec --ai. Par défaut, la valeur openai_model des paramètres (gpt-4o d’origine).
-fo, --folderoutput - Les résultats seront enregistrés dans ce dossier, results par défaut. Il sera créé s’il n’existe pas.
--web PORT - Start the built-in web interface on the given port and
serve results / downloadable reports from a single page. Example:
maigret --web 5000 → open http://127.0.0.1:5000. Without PORT,
uses web_interface_port from settings (5000 out of the box). Full
walkthrough with screenshots: Interface web.
Options de sortie
-v, --verbose - Affiche des informations et des métriques supplémentaires. (loglevel=WARNING)
-vv, --info - Affiche des informations de service. (loglevel=INFO)
-vvv, --debug, -d - Affiche les informations de débogage et les réponses des sites. (loglevel=DEBUG)
--print-not-found - Affiche les sites où le nom d’utilisateur n’a pas été trouvé.
--print-errors - Affiche les messages d’erreur : connexion, captcha, blocage par pays, etc.
Autres modes de fonctionnement
--version - Affiche les informations de version et les dépendances.
--self-check - Effectue une auto-vérification des sites et de la base. Chaque site est testé en recherchant ses noms d’utilisateur connus comme existants et comme inexistants, puis en vérifiant que les résultats correspondent aux attentes. Les échecs individuels (erreurs réseau, exceptions inattendues, etc.) sont capturés et journalisés sans interrompre le processus global : la vérification va donc toujours à son terme. À la fin, Maigret présente un résumé des problèmes trouvés. Si des sites ont été désactivés (voir --auto-disable), Maigret demande si vous voulez enregistrer les modifications ; répondre y/Y réécrit la base locale.
--auto-disable - À utiliser avec --self-check : désactive automatiquement les sites qui échouent aux vérifications (mauvaise détection des noms d’utilisateur existants ou inexistants, erreurs de connexion, exceptions inattendues). Sans cette option, --self-check se contente de signaler les problèmes, sans modifier la base.
--diagnose - À utiliser avec --self-check : affiche un diagnostic détaillé pour chaque site en échec, comprenant le type de vérification, la liste des problèmes trouvés et des recommandations (par exemple un autre checkType).
--submit URL - Analyse automatiquement l’URL de compte ou la page d’accueil de site indiquée, afin de déterminer le moteur du site et les méthodes de vérification de l’existence d’un compte. À la fin, Maigret demande si vous voulez ajouter le site ; répondre y/Y réécrit la base locale.
Rapport Markdown (adapté aux LLM)
L’option --md / -M génère un rapport Markdown conçu à la fois pour la lecture humaine et pour l’analyse par des assistants IA (ChatGPT, Claude, etc.).
maigret username --md
Le rapport contient :
Un résumé des données personnelles agrégées (tous les noms complets, localisations et biographies trouvés sur l’ensemble des comptes), les tags pays, les tags de sites et les dates de première et de dernière activité.
Des sections par compte, avec l’URL du profil, les tags du site et tous les champs extraits (nom d’utilisateur, biographie, nombre d’abonnés, comptes associés, etc.).
Un avertissement sur les faux positifs possibles, rappelant que les comptes peuvent appartenir à des personnes différentes.
Une note sur l”usage éthique et les lois applicables en matière de protection des données.
Utilisation avec des outils d’IA :
Le format Markdown est optimisé pour les fenêtres de contexte des LLM. Vous pouvez donner le rapport directement à un assistant IA pour une analyse complémentaire :
# Generate the report
maigret johndoe --md
# Feed it to an AI tool
cat reports/report_johndoe.md | llm "Analyze this OSINT report and summarize key findings"
Un Markdown structuré, avec une section par site, permet aux outils d’IA de repérer facilement les relations, de recouper les identités et de dégager des motifs communs à plusieurs comptes.
Pour une solution intégrée qui appelle le modèle à votre place et affiche directement la synthèse, voir Analyse par IA (intégrée) ci-dessous.
Analyse par IA (intégrée)
L’option --ai transforme les résultats de la recherche en une courte synthèse d’enquête : elle envoie le rapport Markdown interne à une API de complétion de conversation compatible OpenAI et diffuse la réponse du modèle dans le terminal.
export OPENAI_API_KEY=sk-...
maigret username --ai
# use a smaller / cheaper model
maigret username --ai --ai-model gpt-4o-mini
Tant que --ai est actif, les lignes de progression site par site et le court rapport textuel final sont masqués, afin que la synthèse diffusée reste la sortie principale. Le rapport Markdown lui-même est construit en mémoire et n’est pas écrit sur le disque par --ai seul : combinez-le avec --md si vous voulez aussi le fichier.
La synthèse suit un format fixe, avec des sections pour le nom réel le plus probable, la localisation, la profession, les centres d’intérêt, les langues, le site web principal, les variantes de nom d’utilisateur, le nombre de plateformes, les années d’activité, un indice de confiance et une courte liste de pistes à creuser. Le modèle a pour consigne de s’en tenir à ce que le rapport étaye, et d’éviter de mêler à l’identité principale des profils manifestement sans rapport.
Configuration. La clé d’API est d’abord cherchée dans settings.openai_api_key, puis dans la variable d’environnement OPENAI_API_KEY. Le point d’entrée vaut par défaut https://api.openai.com/v1 et peut être redirigé vers n’importe quel service compatible OpenAI (Azure OpenAI, OpenRouter, un serveur local, etc.) en définissant openai_api_base_url dans settings.json. Voir Paramètres pour la liste complète des options.
Note
--ai effectue une requête réseau vers le point d’entrée de complétion configuré et lui envoie l’intégralité du rapport Markdown, qui contient les données de profil collectées. Ne l’utilisez qu’avec des fournisseurs et des comptes auxquels vous confiez ces données.
Export Neo4j
L’option --neo4j sérialise le graphe de Maigret, avec les mêmes nœuds et relations que ceux derrière --graph, dans un script *_neo4j.cypher que vous pouvez charger dans une base Neo4j pour interroger et explorer visuellement les liens entre identités, comptes, sites et données extraites.
maigret username --neo4j
Cela écrit reports/report_username_neo4j.cypher. Aucune dépendance supplémentaire n’est nécessaire à l’exécution (le script réutilise le graphe networkx que --graph construit déjà).
Ce que contient le script.
Un
CREATE CONSTRAINT ... IF NOT EXISTSqui garantit l’unicité de la propriéténamede chaque:MaigretNode.Un
MERGEpar nœud. Chaque nœud porte trois propriétés :name(la clé unique, par exempleaccount: https://github.com/user),type(username,account,fullname,uid, etc.) etlabel(la valeur lisible).Un
MERGEpar arête, sous forme de relation[:LINKED_TO].
Comme chaque nœud et chaque arête sont fusionnés par MERGE sur leur clé unique, importer deux fois le même rapport est idempotent : les nœuds existants sont mis à jour plutôt que dupliqués.
Import.
# via cypher-shell (Neo4j must be running; default Bolt port 7687)
cypher-shell -u neo4j -p <password> < reports/report_username_neo4j.cypher
Vous pouvez aussi ouvrir le Neo4j Browser à l’adresse http://localhost:7474 et coller le contenu du script dans l’éditeur de requêtes. Retirez l’option -p si l’authentification est désactivée, ou laissez cypher-shell demander le mot de passe de façon interactive.
Explorer le graphe. Une fois importé, examinez-le en Cypher, par exemple :
// show the whole graph
MATCH (n:MaigretNode)-[r:LINKED_TO]->(m) RETURN n, r, m;
// accounts linked to a given username
MATCH (u:MaigretNode {type: 'username'})-[:LINKED_TO]->(a:MaigretNode {type: 'account'})
RETURN u.label, a.label;
La syntaxe CREATE CONSTRAINT ... IF NOT EXISTS FOR ... REQUIRE demande Neo4j 4.4 ou supérieur ; les instructions MERGE elles-mêmes fonctionnent avec n’importe quelle version.