โปรเจ็กต์เพื่อแยกที่อยู่อีเมลทั้งหมดออกจากไฟล์ใดๆ ในพาธที่กำหนดอย่างรวดเร็ว
โปรเจ็กต์นี้ตั้งใจให้เป็นเวอร์ชันโอเพ่นซอร์สใหม่ล่าสุดของโค้ดเบสพื้นฐานที่ฉันเคยใช้มาเป็นเวลากว่าทศวรรษเพื่อแยกที่อยู่อีเมลออกจากการละเมิดข้อมูลก่อนที่จะโหลดลงใน HIBP การละเมิดส่วนใหญ่อยู่ในรูปแบบ .sql หรือ .csv ไม่ว่าจะเป็นไฟล์เดียวหรือหลายไฟล์ภายในโฟลเดอร์เดียว และการแตกไฟล์จะเป็นไปตามกระบวนการง่ายๆ:
regex ที่ฉันใช้มีดังนี้: b[a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-_]+.[a-zA-Z]+b
การตรวจสอบความถูกต้องของที่อยู่อีเมลผ่าน regex นั้นทำได้ยาก แต่ก็ไม่จำเป็นต้องสมบูรณ์แบบสำหรับกรณีการใช้งานนี้เช่นกัน ผลบวกลวงเกิดขึ้นได้น้อยมาก และผลกระทบนั้นน้อยมาก กล่าวคือ สตริงที่ไม่ใช่ที่อยู่จริงถูกโหลดเข้าสู่ HIBP หรือ ที่อยู่จริงที่มีรูปแบบผิดปกติถูกโหลด โดยส่วนใหญ่ regex นี้สามารถสรุปได้ว่าเป็น "สิ่งที่ด้านใดด้านหนึ่งของสัญลักษณ์ @ พร้อมด้วยอักขระ TLD ที่เป็นอัลฟ่า"
การอภิปรายอย่างหลีกเลี่ยงไม่ได้นำไปสู่การปฏิบัติตาม RFC เทียบกับการใช้งานจริงของอักขระบางตัวเมื่อพิจารณากฎการแยกวิเคราะห์ มีข้อควรพิจารณาหลัก 2 ประการที่นี่:
โดยพื้นฐานแล้ว จุดที่ 1 แทบจะไม่เป็นจริงเลยเมื่อเปรียบเทียบกับจุดที่ 2 ผลกระทบของการปฏิเสธที่อยู่ที่เป็นไปตามข้อกำหนดที่ถูกต้องตามกฎหมายอย่างไม่ถูกต้องก็คือว่าจะไม่จบลงที่ HIBP (เช่น ผลกระทบต่ำ) ผลกระทบของการอนุญาตที่อยู่ที่ไม่มีอยู่จริงก็คือการนำบันทึกขยะเข้าสู่ HIBP (ผลกระทบต่ำเช่นกัน) โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงความเป็นไปได้ที่ที่อยู่ที่มีอักขระคลุมเครือจะถูกนำไปใช้จริง (เช่น ยอมรับในแบบฟอร์มการลงทะเบียนและไม่ถูกปฏิเสธ) โดยสมดุลแล้ว ควรปฏิเสธอักขระที่อาจเป็นผลมาจากข้อผิดพลาดในการแยกวิเคราะห์
ตามความเป็นจริงแล้ว รูปแบบที่ไม่ชัดเจนไม่น่าจะถูกนำมาใช้ในที่อยู่อีเมล
ฉันได้ติดต่อและขอการสนับสนุนแล้ว และจะดำเนินการต่างๆ ผ่านบุคคลสำคัญหนึ่งหรือสองคน จากนั้นจึงขอความคิดเห็นในวงกว้าง ฉันสนใจเป็นพิเศษในการเพิ่มประสิทธิภาพบริการสำหรับชุดข้อมูลขนาดใหญ่และไฟล์ที่ไม่ใช่ข้อความ โดยเฉพาะอย่างยิ่งเมื่อมีเอกสารจำนวนมากถูกทีมงานแรนซัมแวร์ทิ้ง ฉันจะเริ่มสร้างปัญหาสำหรับบิตที่ต้องสร้าง
การใช้เครื่องสร้างข้อมูล SQL ของ Red Gate ไฟล์ตัวอย่างที่มีบันทึกข้อมูลการละเมิดทั่วไป 10 ล้านรายการพร้อมให้ดาวน์โหลดจาก Mega ไฟล์นี้ส่งผลให้มีการแยกที่อยู่อีเมล 10 ล้านรายการด้วยแอปเวอร์ชันปัจจุบัน หมายเหตุ: ปัจจุบันไฟล์ข้อมูลทดสอบอยู่ในเวอร์ชัน 2 โดยเวอร์ชันก่อนหน้านี้ส่งผลให้มีที่อยู่ที่ไม่ซ้ำกันน้อยกว่า 10 ล้านรายการเล็กน้อย เนื่องจากมีรูปแบบชื่อโดเมนที่ไม่ถูกต้อง
ไวยากรณ์: 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 เมื่อมีข้อยกเว้นเกิดขึ้น |