Un projet pour extraire rapidement toutes les adresses e-mail de n'importe quel fichier dans un chemin donné
Ce projet est destiné à être une toute nouvelle version open source d'une base de code de base que j'utilise depuis près d'une décennie pour extraire les adresses e-mail des violations de données avant de les charger dans HIBP. La plupart des violations se présentent au format .sql ou .csv, soit dans un seul fichier, soit dans plusieurs fichiers dans un dossier et l'extraction suit un processus simple :
L'expression régulière que j'ai utilisée est la suivante : b[a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-_]+.[a-zA-Z]+b
La validation de l'adresse e-mail via regex est difficile, mais elle n'a pas besoin non plus d'être parfaite pour ce cas d'utilisation. Les faux positifs sont extrêmement rares et leur impact est négligeable, à savoir qu'une chaîne qui n'est pas une véritable adresse est chargée dans HIBP ou qu'une véritable adresse d'un format inhabituel est chargée. Pour l'essentiel, cette expression régulière peut être résumée comme "des éléments de chaque côté d'un symbole @ avec un TLD de caractères alpha".
Inévitablement, des discussions ont conduit à la conformité avec la RFC par rapport aux utilisations pratiques de certains caractères lors de l'examen des règles d'analyse. Il y a 2 considérations principales ici :
De manière anecdotique, le point 1 est rarement vrai par rapport au point 2. L'impact du rejet erroné d'une adresse légitime conforme aux spécifications est qu'elle ne se retrouve pas dans HIBP (c'est-à-dire un faible impact). L'impact de l'autorisation d'adresses qui n'existent pas réellement est que des enregistrements indésirables sont introduits dans HIBP (également à faible impact). Surtout si l'on considère la probabilité qu'une adresse contenant des caractères obscurs soit utilisée dans la pratique (par exemple, acceptée dans un formulaire d'inscription et non rejetée), dans l'ensemble, il est préférable de rejeter les caractères qui sont probablement le résultat d'erreurs d'analyse.
En réalité, il est peu probable que des modèles obscurs soient utilisés dans les adresses e-mail.
J'ai contacté et demandé de l'aide et je ferai démarrer les choses par l'intermédiaire d'une ou deux personnes clés, puis je solliciterai une contribution plus large. Je suis particulièrement intéressé par l'optimisation du service sur des ensembles de données plus volumineux et des fichiers non textuels, en particulier avec l'augmentation du nombre de documents vidés par les équipes de ransomwares. Je vais commencer à créer des problèmes pour les éléments qui doivent être construits.
À l'aide du générateur de données SQL de Red Gate, un exemple de fichier contenant 10 millions d'enregistrements de données de violation typiques peut être téléchargé depuis Mega. Ce fichier entraîne l'extraction d'exactement 10 millions d'adresses e-mail avec la version actuelle de cette application. Remarque : le fichier de données de test est actuellement en V2, la version antérieure générant un peu moins de 10 millions d'adresses uniques en raison de la présence de modèles de noms de domaine non valides.
Syntaxe : AddressExtractor.exe -?
Syntaxe : AddressExtractor.exe -v
Syntaxe : AddressExtractor.exe <input [[... input]]> [-o output] [-r report]
Option | Description |
---|---|
-? , -h , --help | Imprime la syntaxe et les options de la ligne de commande |
-v , --version | Imprime le numéro de version de l'application |
saisir | Un ou plusieurs noms de fichiers ou répertoires d'entrée |
-o , --output sortie | Chemin et nom du fichier de sortie. La valeur par défaut est « adresses_output.txt » |
-r , --report rapport | Chemin et nom du fichier de rapport. La valeur par défaut est « report.txt » |
--recursive | Activer le mode récursif pour les répertoires, qui recherchera les répertoires enfants |
-y , --yes | Confirmer automatiquement les invites pour CONTINUER sans demander |
-q , --quiet | Exécutez avec moins de verbosité, les messages de progression ne sont pas affichés |
Option | Description |
---|---|
--debug | Activer le mode débogage pour une vérification affinée des performances |
--threads nombre | Utilise plusieurs threads avec des canaux pour lire à partir de fichiers. La valeur par défaut est 4 |
--skip-exceptions | Invite automatiquement à CONTINUER lorsqu'une exception se produit |