Trao đổi thông điệp giữa client và server và đảm bảo tính toàn vẹn của thông điệp khi trao đổi...9 III... Tìm hiểu lý thuyết:– Socket là một cấu trúc phần mềm trong một nút mạng của mạng
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
CHUYÊN NGÀNH: AN TOÀN THÔNG TIN
BÁO CÁO THỰC TẬP CƠ SỞ
Bài 15: Lập trình client/server để trao đổi thông tin an toàn
Giảng viên: Đỗ Xuân Chợ
Sinh viên: Trần Hải Long
Mã sinh viên: B18DCAT149
Hà Nội, tháng 5 năm 2022
Trang 2Mục lục
I Tìm hiểu lý thuyết 2
II Mô tả cài đặt & kết quả 3
1 Lập trình client và server với TCP socket 3
2 Trao đổi thông điệp giữa client và server và đảm bảo tính toàn vẹn của thông điệp khi trao đổi 9 III Tài liệu tham khảo 19
Trang 3I Tìm hiểu lý thuyết:
– Socket là một cấu trúc phần mềm trong một nút mạng của mạng máy tính, đóng vai trò như một điểm cuối để gửi và nhận dữ liệu trên toàn mạng
– Sockets chỉ được tạo trong thời gian tồn tại của một tiến trình của một ứng dụng đang chạy
– Socket được chia chủ yếu thành 2 loại:
Socket hướng kết nối: Dựa trên giao thức TCP, chỉ thực hiện trên 2 tiến trình đã thiết lập kết nối Giao thức này đảm bảo dữ liệu truyền đến nơi nhận 1 cách tin cậy và đúng tuần tự
Socket hướng không kết nối: Dựa trên giao thức UDP, không yêu cầu thiết lập kết nối Giao thức này không đảm bảo dữ liệu truyền đến nơi nhận 1 cách tin cậy và toàn vẹn
– Phương thức hoạt động:
Trước hết, Server tạo một socket mới, sau đó gắn nó với một cổng mạng đang mở trên Server Tại thời điểm này, Server chưa chấp nhận kết nối từ client
Tiếp theo, Server chuyển sang trạng thái listen để chờ các kết nối từ Client Nếu có một Client kết nối đến, Server có thể chọn accept hay không accept kết nối này
Ở phía Client, trước hết Client cũng tạo một socket mới Sau khi tạo, Client thử kết nối (connect) tới địa chỉ IP và cổng của Server
Nếu được chấp nhận, Server và Client bắt đầu gửi thông điệp cho nhau
Khi muốn kết thúc phiên trao đổi, Client gửi thông điệp đóng phiên cho Server Server thực hiện đóng phiên và ngắt kết nối với Client
Trang 4II Mô tả cài đặt & kết quả:
1 Lập trình client và server với TCP socket:
– Ý tưởng: Sinh viên thực hiện code client và server Server là Ubuntu victim với địa chỉ IP 192.168.100.147 Client là Kali internal với địa chỉ IP 192.168.100.3 Sau khi tạo kết nối, client
sẽ gửi thông điệp cho server Server có thể đáp trả bằng một thông điệp của họ Client điền "End" nếu muốn kết thúc phiên
– Sinh viên thực hiện code bằng ngôn ngữ Java Sinh viên không
sử dụng IDE mà code trên text editor rồi dùng javac để compile chương trình
Trang 54 – Code Client ở hình dưới:
Trang 6– Code Server ở hình dưới:
– Sinh viên chạy Server.class trên Ubuntu victim, sau khi đã mở cổng 18149
Trang 76 – Sinh viên chạy Client.class trên Kali internal:
Trang 8– Sinh viên sử dụng Wireshark bắt các gói tin gửi từ Client và Server Server là Ubuntu victim với địa chỉ IP 192.168.100.147 Client là Kali internal với địa chỉ IP 192.168.100.3
Trang 98
Trang 102 Trao đổi thông điệp giữa client và server và đảm bảo tính toàn vẹn của thông điệp khi trao đổi:
– Ý tưởng: Trước khi Client gửi bản tin cho Server, Client sẽ ghép string nội dung thông điệp với key để tạo thành 1 string mới (terminalText + key), sau đó tính MD5 checksum (32 kí tự) của string mới này Client sau đó gửi một bản tin string bao gồm thông điệp và hash (terminalText + hash) Khi Server nhận bản tin, Server tách bản tin thành 2 phần là receivedText và receivedHash Server gộp receivedText với key để tạo thành string receivedText + key Server tính MD5 checksum của string này và so sánh với receivedHash Nếu trùng, hiển thị bản tin Nếu không trùng, hiển thị "The received message has lost its integrity." Khi Server gửi thông điệp cho Client cũng thao tác tương tự
– Sinh viên sử dụng thư viện DigestUtils của Apache để tính MD5 checksum thay vì tự viết hàm tính MD5 Trong code bên
dưới, hàm DigestUtils.md5Hex(string) là hàm tính MD5
checksum, đến từ thư viện này
Trang 1110 – Code Client:
Trang 1211 – Code Server (2 ảnh):
Trang 1312 – Sinh viên chạy Server trên Ubuntu victim Đây là trường hợp key của Server và Client giống nhau:
Trang 1413 – Sinh viên chạy Client trên Kali internal:
Trang 1514 – Sinh viên sử dụng Wireshark bắt được bản tin chứa thông điệp
và mã MD5
Trang 1615
Trang 17– Hình bên dưới là ví dụ của Client và Server sau khi sinh viên sửa key Client để không khớp với key Server
Trang 1817
Trang 20III Tài liệu tham khảo:
– Computer Networking - A Top Down Approach, Ross Kurose – DigestUtils:
https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html