Bài 27.5. Phân Tích Nhật Ký Truy Cập Máy Chủ - [Độ khó: Khó]
Bài 27.5. Phân Tích Nhật Ký Truy Cập Máy Chủ - [Độ khó: Khó]
Bạn là một chuyên gia an ninh mạng và cần phân tích nhật ký truy cập (access log) của một máy chủ web để tìm ra các mẫu truy cập, xác định các tài nguyên phổ biến và phát hiện các yêu cầu đáng ngờ. Mỗi dòng trong nhật ký có định dạng cụ thể. Nhiệm vụ của bạn là viết một chương trình đọc các dòng nhật ký và tổng hợp các thông tin sau:
- Số lượng yêu cầu cho mỗi URI (đường dẫn tài nguyên).
- Số lượng yêu cầu theo từng cấp độ log (ví dụ: INFO, WARNING, ERROR).
- Danh sách tất cả các địa chỉ IP duy nhất đã truy cập, sắp xếp theo thứ tự từ điển.
- Tổng số yêu cầu có mã trạng thái lỗi (>= 400).
INPUT FORMAT
Nhiều dòng, mỗi dòng là một mục nhật ký theo định dạng:
YYYY-MM-DD HH:MM:SS - [CẤP_ĐỘ_LOG] - ĐỊA_CHỈ_IP - ĐƯỜNG_DẪN_URI - MÃ_TRẠNG_THÁI
YYYY-MM-DD HH:MM:SS
: Chuỗi thời gian.CẤP_ĐỘ_LOG
: Chuỗi (ví dụ: INFO, WARNING, ERROR, DEBUG).ĐỊA_CHỈ_IP
: Chuỗi địa chỉ IP (ví dụ: 192.168.1.100).ĐƯỜNG_DẪN_URI
: Chuỗi đường dẫn tài nguyên (ví dụ: /api/users, /dashboard/admin, /static/image.png).MÃ_TRẠNG_THÁI
: Một số nguyên (ví dụ: 200, 404, 500). Ràng buộc:- Số lượng dòng nhật ký không quá 1000.
- Mỗi trường đều được phân cách bởi " - ". Cấp độ log nằm trong cặp dấu ngoặc vuông
[]
. - Giả định tất cả các dòng nhật ký đều có định dạng chuẩn.
OUTPUT FORMAT
- Thống kê URI:
Mỗi dòng in
[ĐƯỜNG_DẪN_URI]: [SỐ_LƯỢNG_YÊU_CẦU]
theo thứ tự từ điển của URI. - Thống kê Cấp độ Log:
Mỗi dòng in
[CẤP_ĐỘ_LOG]: [SỐ_LƯỢNG_YÊU_CẦU]
theo thứ tự từ điển của Cấp độ Log. - Danh sách IP duy nhất: Mỗi dòng in một địa chỉ IP duy nhất, sắp xếp theo thứ tự từ điển.
- Tổng yêu cầu lỗi:
Một dòng duy nhất in
Tong yeu cau loi: [SỐ_LƯỢNG_LỖI]
.
Ví dụ:
Input:
2023-10-26 10:00:00 - [INFO] - 192.168.1.10 - /api/users - 200
2023-10-26 10:01:05 - [ERROR] - 10.0.0.5 - /admin/delete - 500
2023-10-26 10:02:10 - [INFO] - 192.168.1.10 - /api/products - 200
2023-10-26 10:03:15 - [WARNING] - 172.16.0.1 - /login - 401
2023-10-26 10:04:20 - [INFO] - 10.0.0.5 - /api/users - 200
Output:
/admin/delete: 1
/api/products: 1
/api/users: 2
ERROR: 1
INFO: 3
WARNING: 1
10.0.0.5
172.16.0.1
192.168.1.10
Tong yeu cau loi: 2
Giải thích:
- Thống kê URI:
/admin/delete
xuất hiện 1 lần./api/products
xuất hiện 1 lần./api/users
xuất hiện 2 lần.- (
/login
không xuất hiện trong output vì nó là một URI khác, tôi đã bỏ qua trong ví dụ để giữ ngắn gọn nhưng chương trình phải xử lý nó). - Đã sắp xếp theo thứ tự từ điển.
- Thống kê Cấp độ Log:
ERROR
xuất hiện 1 lần.INFO
xuất hiện 3 lần.WARNING
xuất hiện 1 lần.- Đã sắp xếp theo thứ tự từ điển.
- Danh sách IP duy nhất:
- Các IP duy nhất là:
192.168.1.10
,10.0.0.5
,172.16.0.1
. - Sắp xếp theo thứ tự từ điển:
10.0.0.5
,172.16.0.1
,192.168.1.10
.
- Các IP duy nhất là:
- Tổng yêu cầu lỗi:
500
(từ IP10.0.0.5
) là lỗi.401
(từ IP172.16.0.1
) là lỗi.- Tổng cộng có 2 yêu cầu lỗi.
Comments