Giới thiệu/ lý do chọn đề tài
Hiện nay, việc quản lý một nhóm máy tính trong các tổ chức như công ty hay trường học trở nên cần thiết Việc thiết lập một máy chủ quản lý giúp tối ưu hóa quy trình quản lý nhiều máy tính từ xa, cho phép người dùng điều khiển và giám sát hiệu quả hơn Điều này không chỉ nâng cao hiệu suất làm việc mà còn góp phần vào sự phát triển bền vững của tổ chức.
Mục tiêu đề tài
Tìm hiểu và xây dựng hệ thống dựa trên giao thức UDP và kỹ thuật multicast cho phép thực hiện lệnh máy tính từ xa Qua đó, người học sẽ tiếp nhận nhiều kinh nghiệm và kiến thức mới, đồng thời củng cố những kiến thức đã được học trước đó.
- Sử dụng ngôn ngữ lập trình Python và biết cách dùng các thư viện hỗ trợ.
- Áp dụng, củng cố các kiến thức đã được học.
Nội dung đề tài
- Tìm hiểu cơ sở lý thuyết môn lập trình mạng.
- Tìm hiểu về giao thức UDP.
- Phân tích và thiết kế hệ thống.
- Tìm hiểu ngôn ngữ lập trình Python.
- Tìm hiểu các nền tảng, công cụ mã nguồn mở như PyCharm và Qt Designer.
Yêu cầu chức năng
- Quản lý được nhiều máy tính
- Nhập lệnh vào CMD từ xa
- Điều khiển màn hình máy tính từ xa
Bố cục đề tài
Sau phần Mở đầu, báo cáo được trình bày cụ thể như sau:
- Phân tích thiết kế hệ thống.
- Giới thiệu chương trình và kết luận.
- Cuối cùng là Tài liệu tham khảo liên quan đến đề tài.
CƠ SỞ LÝ THUYẾT
TỔNG QUAN VỀ SOCKET
Có nhiều định nghĩa khác nhau về socket tùy theo cách nhìn của người sử dụng:
- Một cách tổng quát nhất có thể định nghĩa: một socket là một điểm cuối trong một kết nối giữa hai chương trình đang chạy trên mạng.
Socket là một phương pháp thiết lập kết nối truyền thông giữa chương trình yêu cầu dịch vụ (client) và chương trình cung cấp dịch vụ (server), có thể diễn ra trên mạng hoặc trên cùng một máy tính.
Đối với lập trình viên, socket được xem như một giao diện kết nối giữa tầng ứng dụng và các tầng khác trong mô hình mạng OSI, chịu trách nhiệm thực hiện giao tiếp giữa chương trình ứng dụng và các tầng mạng bên dưới.
Hình 1.1 Mô hình OSI dạng rút gọn
Hiện nay, lập trình viên thường bị hạn chế trong việc tạo socket thủ công, vì việc mở cổng một cách rõ ràng trong các ngôn ngữ như Java hay PHP là rất khó khăn Thay vào đó, họ thường sử dụng các thư viện socket có sẵn, giúp kết nối ứng dụng mà không cần phải can thiệp vào các chi tiết phức tạp của socket, vì những thông tin này đã được ẩn trong các lớp sâu hơn.
Socket là một thực thể phần mềm cho phép nhận và gửi dữ liệu qua kết nối giữa hai ứng dụng mạng Khi cần sử dụng, ứng dụng sẽ tạo socket và khi không còn cần thiết, socket có thể được huỷ bỏ.
- Một socket được định danh bằng một cặp giá trị:
+ Địa chỉ IP của máy tính có chương trình ứng dụng đã tạo ra socket + Số hiệu cổng (port) mà socket dùng để nhận/gửi dữ liệu.
Cổng là số hiệu của chương trình ứng dụng đang chạy trên máy tính, giúp hệ thống theo dõi các ứng dụng này Hệ điều hành gán cho mỗi ứng dụng một con số 16 bits trong khoảng từ 0 đến 65535 Trong đó, các số hiệu cổng từ 0 đến 1023 (tổng cộng 1024 cổng) đã được sử dụng cho nhiều dịch vụ nổi tiếng.
Hình 1.2 Một số cổng dịch vụ
1.1.2 M ô hình Client-Server sử dụng Socket ở chế độ không kết nối UDP
- Giai đoạn 1: Server tạo socket, gán số hiệu cổng
+ socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
+ bind(): Server yêu cầu gán số hiệu cổng (port) cho socket.
- Giai đoạn 2: Client tạo socket
Client sử dụng hàm socket() để tạo một socket nhằm truy cập các dịch vụ của tầng vận chuyển Hệ thống thường tự động gán một số hiệu cổng còn trống cho socket của Client.
- Giai đoạn 3: Trao đổi thông tin giữa client và server
Hình 1.4 Trao đổi thông tin giữa Client-Server
+ Sau khi tạo Socket xong, Client và Server có thể trao đổi thông tin qua lại với nhau thông qua hai hàm send() và receive().
+ Đơn vị dữ liệu trao đổi giữa Client và Server là các Datagram Package (Gói tin thư tín).
Giao thức của ứng dụng cần phải xác định cấu trúc và ý nghĩa của các gói Datagram Mỗi gói Datagram bao gồm thông tin về địa chỉ của người gửi và người nhận, bao gồm IP và Port.
UDP, hay User Datagram Protocol, là một trong những giao thức chính của TCP/IP, cho phép gửi dữ liệu ngắn gọi là datagram giữa các máy tính Mặc dù không đảm bảo tính tin cậy và thứ tự truyền nhận như TCP, UDP lại nhanh chóng và hiệu quả, phù hợp cho các ứng dụng yêu cầu kích thước nhỏ và thời gian phản hồi khắt khe Với tính chất không trạng thái, UDP rất hữu ích cho việc xử lý nhiều truy vấn nhỏ từ nhiều người dùng cùng lúc.
UDP là giao thức truyền dữ liệu sử dụng cơ chế đơn giản của mô hình giao tiếp không kết nối, cho phép gửi dữ liệu từ đầu cuối này đến đầu cuối khác mà không cần xác nhận trạng thái sẵn sàng của đầu cuối nhận, còn được gọi là chế độ CL.
UDP cung cấp khả năng kiểm tra tính toàn vẹn của dữ liệu và xác định số cổng, giúp giải quyết hiệu quả các vấn đề tại nguồn và đích của Datagram.
Khi một ứng dụng sử dụng giao thức UDP, các gói tin được gửi trực tiếp đến người nhận mà không cần xác nhận Người gửi không chờ đợi phản hồi từ người nhận, dẫn đến việc gửi tiếp các gói tin tiếp theo Nếu người nhận bỏ lỡ một số gói tin, chúng sẽ bị mất và không được gửi lại, giúp tăng tốc độ giao tiếp giữa các thiết bị.
1.1.5 Mục đích của giao thức UDP:
Rất nhiều ứng dụng trên Internet sử dụng UDP Dựa trên các ưu và điểm yếu của UDP chúng ta rất có thể tóm lại UDP có ích khi:
- Sử dụng cho các phương thức truyền broadcasting và multicasting khi chúng ta muốn truyền tin với nhiều host.
- Kích thước datagram nhỏ và trình tự đoạn là không có ảnh hưởng.
- Không cần thiết lập quan hệ
- Phần mềm không gửi các dữ liệu đáng kể
- Không cần truyền lại các gói tin.
- Băng thông của mạng đóng vai trò đáng kể.
1.1.6 Nhược điểm của giao thức UDP:
So với giao thức TCP, UDP có những nhược điểm sau:
UDP không thực hiện các tín hiệu bắt tay trước khi gửi dữ liệu, điều này khiến bên gửi không thể xác định liệu datagram đã đến đích hay chưa Do đó, UDP không đảm bảo rằng thông tin đã được truyền đến đúng nơi.
- Dùng các phiên: Để TCP là hướng mối liên quan, các phiên được duy trì giữa các host.
TCP sử dụng các chỉ số phiên (session ID) để duy trì kết nối giữa hai host, trong khi UDP không hỗ trợ phiên nào do tính chất phi kết nối của nó.
UDP không đảm bảo rằng chỉ có một bản sao dữ liệu đến đích, vì nó chia thông số thành các đoạn nhỏ và không chắc chắn rằng các đoạn này sẽ đến đúng thứ tự Ngược lại, TCP sử dụng số thứ tự, số hiệu cổng và các gói tin xác thực liên tục, đảm bảo rằng các gói tin đến đích theo đúng thứ tự mà chúng được tạo ra.
TCP cung cấp mức độ bảo mật cao hơn so với UDP, khiến nhiều tổ chức quyết định cấm các gói tin UDP qua firewall và router Điều này xuất phát từ thực tế rằng các hacker thường lợi dụng các cổng UDP để thực hiện các cuộc tấn công.
NGÔN NGỮ LẬP TRÌNH PYTHON
1.2.1 Giới thiệu về ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình bậc cao đa năng, được phát triển bởi Guido van Rossum và ra mắt lần đầu vào năm 1991 Với ưu điểm dễ đọc, dễ học và dễ nhớ, Python có cấu trúc rõ ràng, giúp người mới học lập trình dễ dàng tiếp cận Ngôn ngữ này cho phép viết mã lệnh với số lần gõ phím tối thiểu, mang lại sự thuận tiện cho người sử dụng.
Python hỗ trợ mô-đun và gói, khuyến khích việc tái sử dụng mã Trình thông dịch Python và thư viện tiêu chuẩn có sẵn dưới dạng mã nguồn mở hoặc nhị phân miễn phí cho tất cả các nền tảng chính, cho phép phân phối miễn phí.
Ngôn ngữ lập trình Python nổi bật với kiểu dữ liệu động và cơ chế cấp phát bộ nhớ tự động, mang đến cấu trúc dữ liệu mạnh mẽ Với cách tiếp cận đơn giản, Python đạt hiệu quả cao trong lập trình hướng đối tượng.
Lập trình viên thường ưa chuộng Python vì khả năng tăng năng suất mà ngôn ngữ này mang lại Việc không cần biên dịch giúp cho chu trình chỉnh sửa, kiểm tra và gỡ lỗi diễn ra nhanh chóng Gỡ lỗi trong Python rất dễ dàng; khi gặp lỗi, trình thông dịch sẽ tạo ra ngoại lệ thay vì gây ra lỗi phân đoạn Nếu chương trình không xử lý ngoại lệ, trình thông dịch sẽ in ra dấu vết ngăn xếp Trình gỡ lỗi cấp nguồn cho phép lập trình viên kiểm tra biến cục bộ và toàn cục, đánh giá biểu thức, thiết lập điểm ngắt và lướt qua mã một cách hiệu quả.
- Đặc điểm của ngôn ngữ Python:
+ Là ngôn ngữ đơn giản, dễ học, dễ hiểu.
+ Vừa hướng thủ tục, vừa hướng đối tượng.
+ Hỗ trợ module và hỗ trợ các gói, thư viện.
+ Xử lý lỗi bằng ngoại lệ.
+ Có các bộ thư viện chuẩn, đáp ứng tất cả các nhu cầu lập trình.
+ Có khả năng tương tác với các module khác.
+ Các chương trình Python có thể chạy đa nền tảng.
+ Có khả năng mở rộng và có thể kết hợp với các ngôn ngữ khác.
1.2.2 Ứng dụng của ngôn ngữ lập trình Python
Lập trình ứng dụng web ngày càng trở nên phổ biến, với nhiều nền tảng như Django, Flask, Pyramid, Plone và Django CMS hỗ trợ việc phát triển Nhiều trang web nổi tiếng như Mozilla, Reddit, Instagram và PBS đều được xây dựng bằng ngôn ngữ lập trình Python.
Python là ngôn ngữ lập trình phổ biến trong lĩnh vực khoa học và tính toán nhờ vào nhiều thư viện mạnh mẽ như SciPy và NumPy, phục vụ cho các mục đích tính toán chung Ngoài ra, các thư viện chuyên dụng như EarthPy cho khoa học trái đất và AstroPy cho thiên văn học cũng rất được ưa chuộng Bên cạnh đó, Python đóng vai trò quan trọng trong các lĩnh vực machine learning, khai thác dữ liệu và deep learning.
Python là ngôn ngữ lý tưởng để phát triển nguyên mẫu phần mềm, cho phép bạn thử nghiệm ý tưởng nhanh chóng Ví dụ, với thư viện Pygame, bạn có thể tạo nguyên mẫu game dễ dàng và nếu nguyên mẫu thành công, bạn có thể chuyển sang C++ để phát triển phiên bản hoàn chỉnh của game.
Python là ngôn ngữ lập trình được ưa chuộng bởi nhiều công ty và trường học để giảng dạy lập trình cho trẻ em và người mới bắt đầu Với cú pháp đơn giản và dễ sử dụng, Python không chỉ sở hữu nhiều tính năng tuyệt vời mà còn là lựa chọn lý tưởng cho những ai lần đầu tiếp cận lập trình.
Hình 1.9 Ứng dụng của Python
1.2.3 Môi trường lập trình PyCharm
PyCharm là một IDE (Môi trường phát triển tích hợp) được phát triển bởi JetBrains, chuyên dành cho lập trình Python Nhiều ứng dụng lớn như Twitter, Facebook, Amazon và Pinterest đã lựa chọn PyCharm làm công cụ phát triển Python của họ.
PyCharm là một IDE mạnh mẽ hỗ trợ chạy trên Windows, Linux và Mac OS, giúp lập trình viên phát triển phần mềm bằng Python một cách nhanh chóng và hiệu quả Nó đi kèm với các mô-đun và gói hữu ích, đồng thời cho phép tùy chỉnh theo nhu cầu của người dùng.
- Khi cài đặt Pycharm, LTV có thể sử dụng một số tính năng sau:
+ Trình chỉnh sửa mã thông minh.
+ Giúp các lập trình viên viết mã chất lượng cao.
+ Bao gồm các lược đồ màu cho các từ khóa, lớp và hàm.
+ Xác định lỗi một cách dễ dàng.
Cung cấp tính năng tự động hoàn thiện và hướng dẫn hoàn thiện mã, giúp các nhà phát triển chỉnh sửa mã một cách hiệu quả hơn với ít nỗ lực và thời gian.
+ Nhà phát triển có thể dễ dàng điều hướng một lớp, hàm hoặc tệp.
Nhà phát triển có khả năng xác định vị trí của một phần tử trong mã nguồn chỉ trong thời gian ngắn, đồng thời có thể kiểm tra và gỡ lỗi toàn bộ mã nguồn một cách hiệu quả.
PyCharm mang đến khả năng thay đổi hiệu quả và nhanh chóng cho cả biến cục bộ và biến toàn cục, đồng thời cải thiện cấu trúc bên trong mà không làm ảnh hưởng đến hiệu suất bên ngoài của mã Ngoài ra, công cụ này còn hỗ trợ phân chia các lớp với các chức năng mở rộng hơn, giúp tối ưu hóa quy trình lập trình.
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
MÔ TẢ TỔNG QUAN
- Máy client: Chỉ bật ứng dụng phía client để kết nối với server
- Máy server: Gửi yêu cầu để client trả lời, điều khiển màn hình máy client.
Bảng 2-1 Chức năng của Server
2 Gửi lệnh đến toàn bộ client
3 Xem cấu hình mạng từng client
4 Khởi chạy điều khiển máy tính từ xa
2.1.4 Các thư viện được dùng trong chương trình
- Socket: Thư viện hỗ trợ kết nối
- Struct: Để lưu trữ các mục
- Sys: Cung cấp các hàm và biến
- PyQt5: Hỗ trợ xây dựng giao diện
- Pyautogui: Hỗ trợ điều khiển chuột
- Mouse: Hỗ trợ điều khiển chuột
- Threading: Hỗ trợ tạo các luồng thực thi
- PIL: Lấy ảnh màn hình máy tính
- win32api: Hỗ trợ bắt sự kiện bàn phím
- Subprocess: Hỗ trợ chạy các lệnh khác từ Python
2.1.5 Các bước xây dựng chương trình
- Bước 1: Tìm hiểu các tài liệu, các chức năng của điều khiển máy tính từ xa.
- Bước 2: Suy nghĩ các chức năng.
- Bước 3: Download công cụ hỗ trợ lập trình.
- Bước 4: Chuẩn bị các thư viện cần thiết và cài đặt.
- Bước 5: Tạo project và import các thư viện.
- Bước 6: Tiến hành lập trình.
- Bước 7: Xây dựng các chức năng.
- Bước 8: Xây dựng giao diện.
- Bước 9: Đưa chương trình vào khởi động trên máy tính.
2.1.6 Sơ đồ hoạt động tổng quát:
Sau khi chạy chương trình trên máy chủ, các ứng dụng của client sẽ tự động kết nối đến máy chủ Danh sách các client đã kết nối sẽ được hiển thị trên máy chủ, cho phép máy chủ yêu cầu lệnh hoặc điều khiển màn hình máy tính của client.
CÁC YÊU CẦU GIAO TIẾP NGOÀI
- Giao diện đơn giản dễ sử dụng.
- Giao diện gồm 3 phần: Phần hiển thị danh sách các client đã kết nối, phần hiển thị các trả về của client và phần thực hiện các chức năng.
- Chạy được trên tất cả các phiên bản của hệ điều hành Windows hiện nay
- Ngôn ngữ Python được sử dụng để lập trình (được thực thi trên PyCharm 2021.3).
CÁC TÍNH NĂNG CỦA HỆ THỐNG
2.3.1 Yêu cầu thực hiện các lệnh
Bảng 2-2 Yêu cầu thực hiện lệnh Tên tính năng
Thực hiện các lệnh tương tự chạy lệnh trên CMD Không
Có thể yêu cầu client chạy các lệnh trên CMD và trả về server.
Server sẽ nhập lệnh cần thực hiện và ô trống:
- Nếu server nhấn nút send, yêu cầu sẽ được gửi đến client chỉ định.
- Nếu server nhấn nút “Send all”, yêu cầu sẽ được gửi đến toàn bộ client
Các client sẽ trả về kết quả sau khi thực hiện.
2.3.2 Điều khiển màn hình client
Bảng 2-3 Điều khiển màn hình client Tên tính năng Điều khiển màn hình
Tiền điều kiện Trình điều khiển mở trước đó phải được đóng.
Nội dung Server sẽ kết nối đến màn hình client và điều khiển.
Nhấn nút remote và server sẽ gửi yêu cầu kết nối đến client và điều khiển màn hình client
Server có thể xem màn hình client và có thể điều khiển chuột và bàn phím.
Bảng 2-4 Gửi file đến Client Tên tính năng Gửi file
Nội dung Server seẽ Gửi fle đếến từng Client hoặc toàn bộ client.
Cách xử lý - Nhấn “Send”: Server sẽ gửi đến Client chỉ định
- Nhấn “Send all”: Server sẽ gửi file đến toàn bộ Client
Kết quả Client sẽ nhận được file và hiển thị trên giao diện
SƠ ĐỒ BIỂU DIỄN QUÁ TRÌNH XỬ LÝ CHỨC NĂNG
Hình 2.13 Xử lý của Client và Server
XỬ LÝ KẾT NỐI
- Khi client mở chương trình, client sẽ tự động kết nối đến server.
- Server sẽ bắt được kết nối của client và hiện client lên danh sách.
Hình 2.14 Client kết nối đến Server
XỬ LÝ ĐIỀU KHIỂN CLIENT
GIỚI THIỆU CHƯƠNG TRÌNH VÀ KẾT LUẬN
CHỨC NĂNG CỦA CHƯƠNG TRÌNH
- Xây dựng được chương trình cho phép nhiều client kết nối với server.
- Server được điểu khiển một hoặc nhiều client bằng lệnh.
- Server được điều khiển màn hình client.
- Server gửi file cho một hoặc nhiều client.
- Server xem được danh sách client.
- Client có thể xem danh sách file được gửi và chọn chỗ lưu file.
GIAO DIỆN CỦA CHƯƠNG TRÌNH
3.2.1 Giao diện chính của chương trình
3.2.3 Giao diện điều khiển client
Hình 3.19 Giao diện điều khiển Client
Hình 3.20 Thông báo Client đang được điều khiển 3.2.4 Gửi lệnh tới một hoặc tất cả client
Nhập lệnh vào khung và nhấn:
- Send: Gửi lệnh tới client được chỉ định
- Send All: Gửi lệnh tới tất cả client
Hình 3.21 Gửi lệnh tới Client
3.2.5 Gửi file tới một hoặc tất cả client
Hình 3.22 Gửi file tới 1 Client
KẾT LUẬN
- Chương trình có giao diện khá đơn giản, dễ dàng sử dụng.
- Về cơ bản đáp ứng được một số chức năng cơ bản của 1 chương trình điều khiển máy tính từ xa.
- Hiểu rõ thêm về lập trình mạng.
- Biết thêm các thư viện thú vị của Python.
- Tuy nhiên vẫn chưa nghiên cứu được bảo mật thông tin.
HƯỚNG PHÁT TRIỂN
- Xây dựng một chương trình hoàn thiện hơn với các chức năng như gửi file, truyền âm thanh trực tiếp từ client đến server.
- Đưa chương trình vào sử dụng thực tế.
- Xây dựng trên các hệ điều hành khác.