



















Preview text:
lOMoAR cPSD| 58970315
TRƯỜNG ĐẠI HỌC XÂY DỰNG
KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN
Đề tài: Chương Trình POP3 Server
Giảng viên hướng dẫn: ThS. Bùi Thanh Phong ThS. Lê Đức Quang HÀ NỘI 06/2023 lOMoAR cPSD| 58970315 MỤC LỤC
LỜI MỞ ĐẦU...................................................................................................................
PHẦN 1: MÔ TẢ BÀI TOÁN.........................................................................................
I. Yêu cầu đề bài:..........................................................................................................
1. Yêu cầu chính:......................................................................................................
2. Chức năng xây dựng của chương trình:.............................................................
PHẦN 2: MÔ TẢ SƠ BỘ GIAO THỨC POP3..............................................................
I. Mô tả sơ lược về giao thức POP3 (Post Office Protocol version 3):......................
II. Mục đích của giao thức POP3................................................................................
III. Mô hình hoạt động của giao thức POP3..............................................................
IV. Các thủ tục chức năng của giao thức POP3:....................................................... V.
Đặc tả cú pháp của giao thức POP3:......................................................................
1. Lệnh TELNET:.................................................................................................... 2.
Lệnh USER:.......................................................................................................... 3.
Lệnh PASS:........................................................................................................... 4.
Lệnh STAT:.......................................................................................................... 5.
Lệnh LIST:........................................................................................................... 6.
Lệnh RETR:......................................................................................................... 7.
Lệnh DELE:..........................................................................................................
8. Lệnh RSET:........................................................................................................ 9.
Lệnh QUIT:........................................................................................................
VI. Minh họa với một phiên POP3 hoàn chỉnh:.......................................................
PHẦN 3: MÔ TẢ THIẾT KẾ CHƯƠNG TRÌNH.......................................................
I. Biểu đồ Usecase:......................................................................................................
1. Biểu đồ tổng quát:.............................................................................................. 2.
Đặc tả Usecase:...................................................................................................
PHẦN 4: KẾT QUẢ CHƯƠNG TRÌNH......................................................................
I. Demo chương trình:...............................................................................................
1. Admin:................................................................................................................. 2.
Client:..................................................................................................................
PHẦN 5: TÀI LIỆU THAM KHẢO............................................................................. lOMoAR cPSD| 58970315 LỜI MỞ ĐẦU
Lập trình hệ thống mạng là lập các chương trình có khả năng truyền dữ liệu qua
mạng Internet bằng cách sử dụng trực tiếp các chức năng mà TCP/IP cung cấp trên các thiết bị cuối.
Internet là mạng của các mạng trên toàn cầu. Ở những thời kỳ đầu tiên của
Internet, thư điện tử Email là ứng dụng ra đời sớm nhất. Trong suốt quá trình phát
triển Internet, Email luôn là công cụ liên lạc phổ biến nhất. Có rất nhiều các giao
thức phổ biến được sử dụng trong ứng dụng thư điện tử như: SMTP, POP3, Echo, HTTP…
Nhóm 5 với những kiến thức đã được học về môn “Lập trình hệ thống mạng”
cùng với sự hiểu biết của mình sẽ cùng nhau tìm hiểu để xây dựng và phát triển
chương trình “POP3 Server”. lOMoAR cPSD| 58970315
PHẦN 1: MÔ TẢ BÀI TOÁN lOMoAR cPSD| 58970315
I. Yêu cầu đề bài: 1. Yêu cầu chính:
Đề bài: Xây dựng chương trình POP3 server để phục vụ nhận thư theo giao thức POP3. Yêu cầu:
- Tìm hiểu giao thức POP3 và chức năng của một chương trình POP3 server cơ bản.
- Ngôn ngữ lập trình: C++.
- Việc lập trình được thực hiện theo thư viện lập trình c++ do giảng viên cung cấp.
- Mã nguồn của chương trình cần tuân theo các chỉ dẫn về quy ước viết mã nguồn.
- Chương trình phải có giao diện người dùng: giao diện command-line.
- Cương trình phải có khả năng xử lý đồng thời, đáp ứng nhiều client cùng một lúc.
2. Chức năng xây dựng của chương trình:
Chức năng quản trị server: start, stop, restart, status và đọc cấu hình server từ file cấu hình.
Nhập thông tin tài khoản email của user từ tệp cấu hình.
Chấp nhận yêu cầu kết nối từ Client.
Chức năng xử lý các yêu cầu gửi từ phía Client đến Server:
- Xác thực tài khoản và đăng nhập: gồm các lệnh từ Client là USER, PASS.
- Cung cấp danh sách các email trong hộp thư: lệnh LIST.
- Chuyển nội dung email cụ thể: lệnh DELE.
- Kết thức phiên và xóa email đã đánh dấu: lệnh QUIT.
PHẦN 2: MÔ TẢ SƠ BỘ GIAO THỨC POP3 - lOMoAR cPSD| 58970315
I. Mô tả sơ lược về giao thức POP3 (Post Office Protocol version 3):
Client kết nối với Server tại cổng 110 và thiết lập một kênh kết nối để nhận email.
Client cần đăng nhập với username và password.
Client gửi lệnh (POP3 request) và Server gửi lại phản hồi (POP3 response).
Bản tin yêu cầu – POP3 request:
- POP3 request có dạng văn bản, kết thức bằng cặp kí tự xuống dòng
CRLF. - Cấu trúc lệnh: CRLF
- Có dấu trống SPACE ngăn cách giữa lệnh và tham số.
- Mỗi lệnh sẽ chỉ thị cho Server thực hiện một công việc mà Client yêu cầu.
Bản tin phản hồi – POP3 response:
- POP3 response có dạng văn bản, kết thúc bằng cặp kí tự xuống dòng
CLRF. - Định dạng của bản tin phản hồi:
CRLF - Mã phản hồi có hai dạng: o
+OK: là lệnh đã được xử lý thành công. o
-ERR: là lệnh xử lý gặp lỗi. Các lệnh POP3 cơ bản:
- Lệnh USER: cung cấp username của tài khoản email. USER CRLF
- Lệnh PASS: cung cấp password của tài khoản email. PASS CRLF
- Lệnh STAT: lấy thống kê tổng số lượng email trong hộp thư. STAT CRLF
- Lệnh LIST: lấy danh sách email trong hộp thư. LIST CRLF
- Lệnh RETR: tải nội dung của một email theo id. RETR CRLF
- Lệnh DELE: đánh dấu xóa email khỏi hộp thư theo id. DELE CRLF
- Lệnh RSET: bỏ đánh dấu xóa cho tất cả email trong hộp thư. RSET CRLF
- Lệnh QUIT: kết thúc phiên POP3 và xóa email đã đánh dấu. QUIT CRLF
II. Mục đích của giao thức POP3
Giao thức POP3 (Post Office Protocol version 3) là giao thức được dùng để lấy
thư điện tử từ server mail, thông qua kết nối TCP/IP.
POP3 được sử dụng để kết nối tới server email và tải email xuống máy tính cá
nhân thông qua ứng dụng email client như Outlook, Thunderbird, Windows Mail, Mac Mail… lOMoAR cPSD| 58970315
III. Mô hình hoạt động của giao thức POP3 Mô tả:
- Khi người sử dụng chương trình email để kết nối đến máy chủ mail của họ sử
dụng giao thứcc POP3, chương trình email của người dùng truyền yêu cầu kết
nối đến máy chủ email thông qua một cổng.
- Sau khi kết nối thành công người dùng gửi thông tin đăng nhập lên để xác thực
với máy chủ email.Thông tin đăng nhập bao gồm tên đăng nhập và mật khẩu của người dùng.
- Chương trình email gửi yêu cầu lấy thông tin email của người dùng đến máy
chủ email. Máy chủ email trả về danh sách các email trong hộp thư của người
dùng, bao gồm: tiêu đề, ngày gửi, tên người gửi, kích thước.
- Người dùng có thể lấy một email hoặc tất cả danh sách email được máy chủ email trả về. lOMoAR cPSD| 58970315
- Nếu người dùng chọn lấy nội dung email, chương trình email của người dùng
gửi yêu cầu đến máy chủ email để lấy nội dung email. Máy chủ email sẽ trả về
nội dung email cho chương trình email của người dùng.
- Sau khi đọc hoặc lấy nội dung email, người dùng có thể xóa một hoặc nhiều
email từ hộp thư của họ.
- Khi người dùng hoàn thành các thao tác trên, chương trình email client sẽ ngắt
kết nối với máy chủ email.
IV. Các thủ tục chức năng của giao thức POP3:
Thủ tục chức năng chính trong giao thức POP3 là chức năng nhận email từ server đến client.
Một số thủ tục khác (mà phạm vi đồ án không yêu cầu) như xác thực người dùng,
thực hiện các thao tác quản lý email trên server, cập nhật trạng thái của email sau
khi người dùng thực hiện các thao tác email trên server.
Thủ tục chức năng nhận email:
Thủ tục này sẽ giúp người dùng tải email từ server về máy tính cá nhân.
Các bước của thủ tục nhận email:
- Bước 1: kết nối với máy chủ email bằng cách sử dụng giao thức TCP/IP và
cổng 110. telnet 127.0.0.1 110 (CRLF) CRLF là 2 kí tự \r\n
Lệnh này sử dụng telnet để kết nối với IP và Port 110.
- Bước 2: xác thực người dùng bằng tên đăng nhập và mật khẩu bằng cách sử
dụng lệnh USER và PASS từ client: USER (CRLF) PASS (CRLF)
- Bước 3: sau khi xác thực thành công, người dùng gửi lệnh STAT. STAT (CRLF)
Lệnh này sẽ đồng bộ hóa thư mục của người dùng và gửi danh sách các thư
mục có sẵn. Response sẽ có dạng là “+Ok ”. Trong đó msg là
số mail có trong hộp thư của người dùng, bytes là tổng số dung lượng mail
của toàn bộ mail có trong hộp thư.
- Bước 4: Tiếp theo sử dụng lệnh LIST LIST (CRLF) lOMoAR cPSD| 58970315
Người dùng gửi lệnh này để liệt kê danh sách các email và kích thước của chúng.
- Bước 5: sử dụng lệnh RETR để tải email từ máy chủ. RETR (CRLF)
msg là số thứ tự của email trong danh sách được trả về bởi lệnh LIST. Sau khi
gửi câu lệnh, server sẽ trả về nội dung của email dưới dạng các gói tin dữ liệu.
Sau đây là minh họa việc sử dụng lệnh và phản hồi trong quá trình nhận email.
Trong đó, C là phía client gửi câu lệnh, S là phía server gửi phản hồi. C: USER hoang S: +OK C: PASS 123456 S: +OK C: STAT S: +OK C: LIST S: +OK C: RETR 3 S: +OK
Để đóng kết nối và kết thúc phiên làm việc, người dùng sử dụng lệnh QUIT gửi lên server. QUIT (CRLF)
V. Đặc tả cú pháp của giao thức POP3:
Các lệnh POP3 là các chuỗi ký tự được kết thúc bởi CRLF, có thể có các tham số
theo sau hoặc là CRLF nếu không có tham số nào. 1. Lệnh TELNET:
Lệnh này được sử dụng để kết nối tới máy chủ email. Lệnh gồm hai trường tham
số là địa chỉ IP và PORT.
Cú pháp: TELNET (CRLF) Nếu
lệnh đúng, client sẽ được kết nối đến server. 2. Lệnh USER:
Lệnh này được sử dụng để người dùng gửi tên đăng nhập lên server. Lệnh có 1
trường đi theo sau là tên đăng nhập. Cú pháp: USER (CRLF)
Phản hồi: +OK Password required for (CRLF) lOMoAR cPSD| 58970315 3. Lệnh PASS:
Lệnh này được sử dụng để người dùng gửi mật khẩu lên server. Lệnh có 1 trường
đi theo sau là mật khẩu. Cú pháp: PASS (CRLF)
Phản hồi: +OK Mailbox locked and ready (CRLF) 4. Lệnh STAT:
Lệnh này được sử dụng để người dùng lấy tổng số email và tổng số dung lượng. Cú pháp: STAT (CRLF) Phản hồi: +OK (CRLF) 5. Lệnh LIST:
Lệnh này được sử dụng để người dùng lấy danh sách email và dung lượng của từng email. Cú pháp: LIST (CRLF) Phản hồi: +OK (CRLF) (CRLF) (CRLF) (CRLF) … 6. Lệnh RETR:
Lệnh này được sử dụng để người dùng lấy email theo tham số chỉ định. Cú pháp: RETR (CRLF) Phản hồi: +OK octets (CRLF) 7. Lệnh DELE:
Lệnh này được sử dụng để người dùng xóa email theo tham số chỉ định. Lệnh chỉ
có hiệu lực khi người dùng đánh lệnh QUIT. Cú pháp: DELE (CRLF)
Phản hồi: +OK Message number marked (CRLF) 8. Lệnh RSET:
Lệnh này được sử dụng để người dùng lấy lại email đã xóa với điều kiện là người
dùng chưa đánh tới lệnh QUIT. Cú pháp: RSET (CRLF) Phản hồi: +OK (CRLF) 9. Lệnh QUIT:
Lệnh này được sử dụng khi người dùng muốn đóng kết nối với máy chủ. lOMoAR cPSD| 58970315 Cú pháp: QUIT (CRLF)
Phản hồi: +OK Aba he (CRLF
VI. Minh họa với một phiên POP3 hoàn chỉnh:
PHẦN 3: MÔ TẢ THIẾT KẾ CHƯƠNG TRÌNH lOMoAR cPSD| 58970315
I. Biểu đồ Usecase:
1. Biểu đồ tổng quát:
2. Đặc tả Usecase:
Mô tả usecase theo frameword của thư viện socket a. Usecase Start: Tác nhân: Admin.
Điều kiện ban đầu: Server chưa được chạy. Mô tả: 1) Admin nhập lệnh start.
2) Hệ thống kiểm tra trạng thái:
2.1) Nếu Server chưa chạy thì hệ thống khởi động Server.
2.2) Nếu Server đã chạy thì hệ thống thông báo Server đang chạy.3)
Hệ thống hiển thị kết quả cho Admin.
Điều kiện kết thúc: hiển thị thông báo Server chạy thành công. lOMoAR cPSD| 58970315 b. Usecase Stop: Tác nhân: Admin.
Điều kiện ban đầu: Server đang hoạt động bình thường. Mô tả: 1) Admin nhập lệnh stop.
2) Hệ thống kiểm tra trạng thái: 2.1)
Nếu Server chưa chạy thì hệ thống thông báo Server chưa được chạy. 2.2)
Nếu Server đã chạy thì hệ thống dừng hoạt động của Server.3)
Hệ thống hiển thị kết quả cho Admin.
Điều kiện kết thúc: hiển thị thông báo Server đã dừng hoạt động thành công. lOMoAR cPSD| 58970315 c. Usecase Restart: Tác nhân: Admin.
Điều kiện ban đầu: Server đang hoạt động bình thường. Mô tả:
1) Admin nhập lệnh restart.
2) Hệ thống kiểm tra trạng thái:
2.1) Nếu Server chưa chạy thì hệ thống thông báo Server chưa được chạy.
2.2) Nếu Server đã chạy thì hệ thống dừng hoạt động của Server. Sau đó hệ thống sẽ chạy Server.
3) Hệ thống hiển thị kết quả cho Admin.
Điều kiện kết thúc: hiển thị thông báo Server đã chạy lại thành công. lOMoAR cPSD| 58970315
d. Usecase Get Server’s Status:Tác nhân: Admin.
Điều kiện ban đầu: không có. Mô tả:
1) Admin nhập lệnh status.
2) Hệ thống kiểm tra trạng thái:
2.1) Nếu Server chưa chạy thì hệ thống thông báo Server chưa được chạy. 2.2)
Nếu Server đang chạy thì hệ thống thông báo Server đang được chạy.
3) Hệ thống hiển thị kết quả cho Admin.
Điều kiện kết thúc: hiển thị thông báo trạng thái của Server. lOMoAR cPSD| 58970315
e. Usecase Open Session: Tác nhân: Client.
Điều kiện ban đầu: Server đang hoạt động bình thường. Mô tả:
1) Client yêu cầu thiết lập kết nối (theo giao thức TCP).
2) Server nhận yêu cầu và xử lý:
2.1) Server chấp nhận, thiết lập kết nối và tạo ra Socket.
2.2) Server tạo 1 luồng mới thực thi phiên làm việc với Client.
2.3) Server tiếp tục lắng nghe yêu cầu kết nối. Điều kiện kết thúc:
- Server lắng nghe yêu cầu kết nối.
- Luồng mới thực thi phiên làm việc với Client: nhận yêu cầu, xử lý và phản hồi. lOMoAR cPSD| 58970315
f. Usecase Handle Request:Điều kiện ban đầu:
- Server đang hoạt động bình thường.
- Client đã kết nối và có một phiên POP3 được thiết lập. Mô tả:
1) Client gửi 1 bản tin yêu cầu (request).
2) Server nhận bản tin và xử lý:
2.1) Server phân tích lệnh và tham số trong bản tin.
2.2) Server xử lý và thực hiện lệnh.
2.3) Server tạo bản tin phản hồi (response) và gửi cho Client. Điều kiện kết thúc:
- Server hoàn thành xử lý lệnh.
- Client nhận được bản tin phản hồi. lOMoAR cPSD| 58970315
Triển khai cụ thể hợn trình tự thực hiện usecase Handle Request với các Lớp hỗ
trợ như POP3Session trong biểu đồ Sequence sau:
Các Usecase mở rộng của Usecase Handle Request, xử lý các lệnh của Client theo giao thức POP3: lOMoAR cPSD| 58970315
f.1. Usecase Handle USER request <> Handle Request: Điều kiện ban đầu:
- Server đang hoạt động bình thường.
- Client đã kết nối và có một phiên POP3 được thiết lập. Mô tả:
1) Client gửi bản tin yêu cầu chứa lệnh USER và tham số gồm: 2)
Server nhận bản tin, phân tích và xác định lệnh USER và xử lý:
2.1) Server kiểm tra cú pháp và tham số có hợp lệ không. Nếu hợp lệ thìsang
bước 2.2. Nếu sai thì tạo bản tin phản hồi với mã “-ERR…” và chuyển sang bước 2.3.
2.2) Server kiểm tra usename có trong danh sách tài khoản của Serverkhông.
Nếu có thì lưu lại username, tạo bản tin phản hồi mã “+OK…”. Nếu
không có thì tạo bản tin phản hồi mã “-ERR…”.
2.3) Server gửi bản tin phản hồi cho Client. Điều kiện kết thúc:
- Server hoàn thành xử lý.
- Client nhận được bản tin phản hồi.
f.2. Usecase Handle PASS request <> Handle Request: Điều kiện ban đầu:
- Server đang hoạt động bình thường. lOMoAR cPSD| 58970315
- Client đã kết nối và có một phiên POP3 được thiết lập.
- Đã có thông tin username trong POP3Session. Mô tả:
1) Client gửi bản tin yêu cầu chứa lệnh PASS và tham số gồm: 2)
Server nhận bản tin, phân tích và xác định lệnh PASS và xử lý:
2.1) Server kiểm tra cú pháp và tham số có hợp lệ không. Nếu hợp lệ thìsang
bước 2.2. Nếu sai thì tạo bản tin phản hồi với mã “-ERR…” và chuyển sang bước 2.3.
2.2) Server kiểm tra password có đúng với password của username trongdanh
sách tài khoản của Server không. Nếu có thì lưu lại password, tạo bản tin
phản hồi mã “+OK…”. Nếu không có thì tạo bản tin phản hồi mã “- ERR…”.
2.3) Server gửi bản tin phản hồi cho Client. Điều kiện kết thúc:
- Server hoàn thành xử lý.
- Client nhận được bản tin phản hồi.
f.3. Usecase Handle LIST request <> Handle Request: Điều kiện ban đầu:
- Server đang hoạt động bình thường.
- Client đã kết nối và có một phiên POP3 được thiết lập.