Un proyecto para extraer rápidamente todas las direcciones de correo electrónico de cualquier archivo en una ruta determinada
Este proyecto pretende ser una nueva versión de código abierto de una base de código básica que he usado durante la mayor parte de una década para extraer direcciones de correo electrónico de violaciones de datos antes de cargarlas en HIBP. La mayoría de las infracciones se encuentran en formato .sql o .csv, ya sea en un solo archivo o en varios archivos dentro de una carpeta, y la extracción sigue un proceso simple:
La expresión regular que he usado es la siguiente: b[a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-_]+.[a-zA-Z]+b
La validación de direcciones de correo electrónico mediante expresiones regulares es difícil, pero tampoco es necesario que sea perfecta para este caso de uso. Los falsos positivos son extremadamente raros y el impacto es insignificante, es decir, que se cargue en HIBP una cadena que no es una dirección genuina o que se cargue una dirección genuina de un formato inusual. En su mayor parte, esta expresión regular se puede resumir como "cosas a ambos lados de un símbolo @ con un TLD de caracteres alfa".
Inevitablemente, la discusión ha llevado al cumplimiento del RFC frente a los usos prácticos de ciertos caracteres al considerar las reglas de análisis. Hay dos consideraciones principales aquí:
Como anécdota, el punto 1 rara vez es cierto en comparación con el punto 2. El impacto de rechazar falsamente una dirección legítima que cumple con las especificaciones es que no termina en HIBP (es decir, de bajo impacto). El impacto de permitir direcciones que en realidad no existen es que se introducen registros basura en HIBP (también de bajo impacto). Especialmente cuando se considera la probabilidad de que una dirección con caracteres oscuros se utilice en la práctica (por ejemplo, aceptada en un formulario de registro y no rechazada), en general es preferible rechazar caracteres que probablemente sean el resultado de errores de análisis.
Siendo realistas, es poco probable que se utilicen patrones oscuros en las direcciones de correo electrónico.
Me acerqué y pedí apoyo y pondré en marcha las cosas a través de una o dos personas clave y luego buscaré opiniones más amplias. Estoy particularmente interesado en optimizar el servicio en conjuntos de datos más grandes y archivos no basados en texto, especialmente con el aumento de documentos descartados por equipos de ransomware. Comenzaré a crear problemas para las partes que necesitan construirse.
Utilizando el generador de datos SQL de Red Gate, se puede descargar desde Mega un archivo de muestra que contiene 10 millones de registros de datos de violaciones típicas. Este archivo da como resultado que se extraigan exactamente 10 millones de direcciones de correo electrónico con la versión actual de esta aplicación. Nota: el archivo de datos de prueba se encuentra actualmente en la V2, y la versión anterior generaba un poco menos de 10 millones de direcciones únicas debido a la presencia de patrones de nombres de dominio no válidos.
Sintaxis: AddressExtractor.exe -?
Sintaxis: AddressExtractor.exe -v
Sintaxis: AddressExtractor.exe <input [[... input]]> [-o output] [-r report]
Opción | Descripción |
---|---|
-? , -h , --help | Imprime la sintaxis y las opciones de la línea de comando. |
-v , --version | Imprime el número de versión de la aplicación. |
aporte | Uno o más nombres de archivos o directorios de entrada |
-o , --output salida | Ruta y nombre de archivo del archivo de salida. El valor predeterminado es 'direcciones_salida.txt' |
-r , --report informe | Ruta y nombre de archivo del archivo de informe. El valor predeterminado es 'report.txt' |
--recursive | Habilite el modo recursivo para directorios, que buscará directorios secundarios |
-y , --yes | Confirme automáticamente las indicaciones para CONTINUAR sin preguntar |
-q , --quiet | Ejecute con menos detalle, los mensajes de progreso no se muestran |
Opción | Descripción |
---|---|
--debug | Habilite el modo de depuración para una verificación de rendimiento optimizada |
--threads | Utiliza múltiples hilos con canales para leer archivos. Por defecto es 4 |
--skip-exceptions | Solicita automáticamente CONTINUAR cuando ocurre una excepción |