특정 경로에 있는 모든 파일에서 모든 이메일 주소를 빠르게 추출하는 프로젝트
이 프로젝트는 제가 지난 10년 동안 데이터 침해로부터 이메일 주소를 추출한 후 HIBP에 로드하는 데 사용해 온 기본 코드베이스의 새로운 오픈 소스 버전이 되도록 의도되었습니다. 대부분의 위반은 단일 파일 또는 폴더 내 여러 파일의 .sql 또는 .csv 형식이며 추출은 간단한 프로세스를 따릅니다.
내가 사용한 정규식은 다음과 같습니다: b[a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-_]+.[a-zA-Z]+b
정규식을 통한 이메일 주소 확인은 어렵지만 이 사용 사례에 완벽할 필요도 없습니다. 거짓 긍정은 극히 드물며 그 영향은 미미합니다. 즉, 진짜 주소가 아닌 문자열이 HIBP에 로드되거나 비정상적인 형식 의 진짜 주소가 로드됩니다. 대부분의 경우 이 정규식은 "알파 문자의 TLD가 포함된 @ 기호의 양쪽에 항목을 입력하는 것"으로 요약될 수 있습니다.
구문 분석 규칙을 고려할 때 필연적으로 논의를 통해 RFC 준수와 특정 문자의 실제 사용이 결정되었습니다. 여기에는 두 가지 주요 고려 사항이 있습니다.
일화로, 포인트 1은 포인트 2에 비해 거의 사실이 아닙니다. 합법적인 사양 준수 주소를 잘못 거부하는 경우 HIBP로 끝나지 않습니다(즉, 영향이 낮음). 실제로 존재하지 않는 주소를 허용하면 정크 레코드가 HIBP에 도입됩니다(영향도 낮음). 특히 모호한 문자가 포함된 주소가 실제로 사용될 가능성(예: 등록 양식에 승인되고 거부되지 않음)을 고려할 때, 균형적으로 구문 분석 오류의 결과일 가능성이 있는 문자를 거부하는 것이 바람직합니다.
현실적으로 모호한 패턴은 이메일 주소에 사용되지 않을 것입니다.
저는 연락하여 지원을 요청했으며 한두 명의 주요 인력을 통해 작업을 시작한 다음 더 광범위한 의견을 구할 것입니다. 저는 특히 랜섬웨어 직원이 문서를 버리는 경우가 많아 대규모 데이터 세트와 텍스트 기반이 아닌 파일 전반에 걸쳐 서비스를 최적화하는 데 관심이 있습니다. 구축이 필요한 부분에 대한 문제를 만들기 시작하겠습니다.
Red Gate의 SQL 데이터 생성기를 사용하면 일반적인 위반 데이터에 대한 1천만 개의 기록이 포함된 샘플 파일을 Mega에서 다운로드할 수 있습니다. 이 파일을 사용하면 이 앱의 현재 버전에서 정확히 10M개의 이메일 주소가 추출됩니다. 참고: 테스트 데이터 파일은 현재 V2에 있으며, 이전 버전에서는 유효하지 않은 도메인 이름 패턴으로 인해 고유 주소가 1천만 개보다 약간 적습니다.
구문: AddressExtractor.exe -?
구문: AddressExtractor.exe -v
구문: AddressExtractor.exe <input [[... input]]> [-o output] [-r report]
옵션 | 설명 |
---|---|
-? , -h , --help | 명령줄 구문 및 옵션을 인쇄합니다. |
-v , --version | 애플리케이션 버전 번호를 인쇄합니다. |
입력 | 하나 이상의 입력 파일 이름 또는 디렉터리 |
-o , --output 출력 | 출력 파일의 경로 및 파일 이름입니다. 기본값은 'addresses_output.txt'입니다. |
-r , --report 보고서 | 보고서 파일의 경로 및 파일 이름입니다. 기본값은 'report.txt'입니다. |
--recursive | 하위 디렉터리를 검색하는 디렉터리에 대한 재귀 모드를 활성화합니다. |
-y , --yes | 묻지 않고 계속하라는 메시지를 자동으로 확인합니다. |
-q , --quiet | 덜 자세한 내용으로 실행하면 진행 메시지가 표시되지 않습니다. |
옵션 | 설명 |
---|---|
--debug | 미세 조정된 성능 확인을 위해 디버그 모드를 활성화합니다. |
--threads 수 | 파일에서 읽기 위해 채널이 있는 여러 스레드를 사용합니다. 기본값은 4 입니다. |
--skip-exceptions | 예외가 발생하면 자동으로 CONTINUE를 묻는 메시지가 표시됩니다. |