Agent được xây dựng bằng ngôn ngữ Python, sử dụng các module tương ứng để thực hiện giao tiếp qua giao thức AMQP.
3.2.1. Giới thiệu
Chương trình thám mật khẩu email thử nghiệm được xây dựng với các module chính như sau:
Module File mã nguồn Nhiệm vụ
Module đọc dữ liệu data_load.py Đọc thông tin về tài khoản email cần thám mã từ các file json được lưu trữ tại thư mục data.
Module đọc cấu hình config.py Đọc file cấu hình được lưu trong thư mục config. Sau khi đọc file cấu hình, trong bộ nhớ sẽ có thông tin về địa chỉ, thông tin xác thực để truy cập từ xa đến
41
các node RabbitMQ.
Module sinh mật khẩu. genpass.py Sinh mật khẩu dựa trên thông tin được chuyển đến từ module data_load.py Module kết nối connection.py Sinh và duy trì kết nối giữa các node Module master, phân
phối công việc
master_agent.py Nhận thông điệp từ các node worker, phân phối tập mật khẩu thử, hoặc dừng việc thử mật khẩu nếu tìm được mật khẩu đúng.
Module đóng gói dữ liệu
data_source.py Đóng gói các thông tin tài khoản email để worker thử tạo kết nối
Module worker thực hiện công việc
worker_agent.py Nhận phần công việc từ master node, thực hiện kiểm tra mật khẩu, gửi thông báo cho master node nếu tìm được mật khẩu đúng hoặc thực hiện kiểm tra xong chuỗi mật khẩu.
Module thử mật khẩu try_auth.py Kiểm tra tính đúng đắn của mật khẩu bằng cách thử tạo kết nối dựa trên các thông tin sẵn có.
Module main chạy ở phía Master node.
main_master.py Thiết lập các module chạy ở phía master node.
Module chạy ở phía Worker node
main_worker.py Thiết lập các module chạy ở phía worker.
Hình 11: Các module trong hệ thống thám mật khẩu email
Các module được xây dựng trên nền tảng: - Python 2.7
42
- RabbitMQ 3.5: RabbitMQ là một chương trình AMQP phổ biến, viết bằng ngôn ngữ Erlang, đảm bảo khả năng chịu tải và song song hóa cao Client RabbitMQ cho Python
Mô tả giải pháp thiết kế phân tán:
Thiết kế giải pháp phân tán dựa trên các hệ thông truyền thông điệp RabbitMQ. Tôi lựa chọn RabbitMQ do cài đặt đơn giản, có module để xử lý trên python. Các thông điệp được truyền đi trong hệ thống được chuẩn hóa dưới dạng thức json.
Thiết kế bao gồm một master node có nhiệm vụ sinh mật khẩu thử và phân phối mật khẩu thử cho các worker node. Các worker node thử tính đúng đắn của mật khẩu bằng việc thử tạo kết nối sử dụng module try_auth.py. Cụ thể như sau: - Queue: mỗi node sẽ sở hữu một queue và một routing key. Queue là hàng đợi chứa các thông điệp được gửi đến node đó, routing key cho biết khóa của queue. Worker chỉ nhận các thông điệp có routing key phù hợp.
- Master node:
Mô tả đối tượng MasterAgent. Đối tượng này có các thuộc tính liên quan đến tham số kết nối đến dịch vụ RabbitMQ trên localhost, các kết nối đế Worker node, cùng với Exchange, Queue và Routing Queue của nó.
Queue của master node là hàng đợi lưu trữ các thông điệp được gửi đến master từ worker. Các thông điệp này bao gồm (1) thông điệp yêu cầu dữ liệu: yêu cầu master gửi đến một lô dữ liệu mới; khi nhận được thông điệp này, master sẽ dựa trên thông tin cụ thể trong thông điệp để gửi lô mật khẩu thử đến worker tương ứng; (2) thông điệp thông báo tìm thấy dữ liệu phù hợp: thông điệp này thông báo rằng worker đã tìm thấy password phù hợp; do tính duy nhất của password phù hợp nên master sẽ lưu trữ mật khẩu đúng và ngừng sinh không gian mật khẩu.
43
Mô tả đối tượng WorkerAgent: đối tượng này có các thuộc tính liên quan đến kết nối dịch vụ RabbitMQ trên localhost cùng với kết nối đến master node cùng với Exchange, Queue và Routing key.
Queue của worker node là hàng đợi lưu trữ thông điệp được gửi đến worker từ master. Các thông điệp này bao gồm (1) dữ liệu mới: lô mật khẩu thử mà worker cần thử; hoặc (2) kết thúc tìm kiếm: khi nhận được thông điệp này, worker ngừng tìm kiếm và xóa trắng queue.
Thử mật khẩu:
Tôi sử dụng poplib, smtplib, imaplib tích hợp sẵn trong python 2.7 để thử tạo kết nối đến mailserver sử dụng giao thức tương ứng. Mật khẩu thử được coi là phù hợp nếu ta có thể tạo kết nối thành công đến tài khoản tương ứng trên mailserver sử dụng mật khẩu đó.
3.3 Thử nghiệm