Tải bản đầy đủ (.docx) (43 trang)

Chương trình DHCP Server, chương trình Keylogger

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (663.22 KB, 43 trang )

Mục Lục


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Danh sách hình vẽ

SVTH: Trịnh Minh Triều

2


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Danh sách từ viết tắt
API: Application Programming Interface
DHCP: Dynamic Host Configuration Control Protocol
DNS: Domain Name System
FTP: File Transfer Protocol
GAN: Global Area Network
HTTP: Hyper Text Transfer Protocol
IP: Internet Protocol
LAN: Local Area Network
MAC: Media Access Control
MAN: Metropolitan Area Network
RAM: Random Access Memmory
SMTP: Simple Mail Transfer Protocol


TCP: Transmission Control Protocol
UDP: User Datagram Protocol

SVTH: Trịnh Minh Triều

3


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

MỞ ĐẦU
Máy tính và mạng máy tính có vai trò hết sức quan trọng trong cuộc sống
ngày nay. Ngày nay trong bất kỳ lĩnh vực nào cũng cần đến máy tính, máy tính rất
hữu ích với chúng ta. Chính nhờ có máy tính và sự phát triển của nó đã làm cho
khoa học kỹ thuật phát triển vượt bậc, kinh tê phát triển nhanh chóng thần kỳ.
Cùng với sự ra đời và phát triển của máy tính và mạng máy tính là vấn đề
bảo mật thông tin, ngăn chặn sự xâm nhập và đánh cắp thông tin trong máy tính và
thông tin cá nhân trên mạng máy tính khi mà ngày càng có nhiều trojan, keylogger,
malware trên mạng xâm nhập vào máy tính. Và đồng thời việc hoạt động được của
máy tính trong mạng LAN cũng là một vấn đề quan trọng.
Được sự hướng dẫn nhiệt tình và chu đáo của thầy Phạm Minh Tuấn, em đã
tìm hiểu và nghiên cứu Đồ án Cơ sở ngành Mạng: Đề tài 1: Tìm hiểu Keylogger –
Đề tài 2: Chương trình DHCP Server. Đồ án trình bày những vấn đề tổng quan về
cách thức hoạt động của Keylogger, DHCP Server.
Lần đầu tiên học phần đồ án có sự kết hợp giữa hai mảng kiến thức như vậy
là một cơ hội cho sinh viên nghiên cứu và trau dồi thêm các kiến thức đã được học,
đặc biệt là các kiến thức học phần Mạng máy tính, Nguyên lý hệ điều hành, Lập
trình .Net, Lập trình Mạng. Đồ án này là một cột mốc mà ở đó kĩ năng và khả năng

lập trình của sinh viên lại thêm một bước mới vì sự xuất hiện của những mảng kiến
thức mới lạ, bắt buộc sinh viên phải tự tìm hiều rất nhiều.
Do nội dung đồ án rộng và bao gồm nhiều kiến thức mới mẻ, thời gian và
kiến thức còn hạn chế, việc nghiên cứu chủ yếu dựa trên lý thuyết nên chắc chắn đồ
án không tránh khỏi những thiếu sót. Em rất mong nhận được sự đóng góp ý kiến
của thầy cô giáo và bạn bè.
Đà Nẵng, tháng 05 năm 2018
Sinh viên
Trịnh Minh Triều

SVTH: Trịnh Minh Triều

4


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH
TIÊU ĐỀ: Chương trình ghi lại thao tác bàn phím Keylogger
GIỚI THIỆU ĐỀ TÀI
Trong khuôn khổ Đồ Án môn học, dưới sự gợi ý của thầy Phạm Minh Tuấn,
em đã chọn đề tài Keylogger – sử dụng Hook windows.
Khi mà thị trường windows chiếm hơn 90% trên thế giới thì việc được
nghiên cứu về một tính năng quan trọng, cơ bản nhất của windows làm em rất hứng
thú. Hơn nữa việc thực hiện đề tài giúp em biết rõ hơn về một kỹ thuật phần mềm
gián điệp, ăn cắp thông tin để biết cách phòng tránh.

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT

I.

Lý thuyết hệ điều hành

Nếu không có phần mềm, máy tính chỉ là một thiết bị điện tử thông thường. Với
sự hỗ trợ của phần mềm, máy tính có thể lưu trữ, xử lý thông tin và người dùng có
thể gọi lại được thông tin này. Phần mềm máy tính có thể chia thành nhiều loại:
chương trình hệ thống, quản lý sự hoạt động của chính máy tính, chương trình ứng
dụng, giải quyết các vấn đề liên quan đến việc sử dụng và khai thác máy tính của
người dùng. Hệ điều hành thuộc nhóm các chương trình hệ thống và nó là một
chương trình hệ thống quan trọng nhất đối với máy tính và cả người sử dụng. Hệ
điều hành điều khiển tất cả các tài nguyên của máy tính và cung cấp một môi trường
thuận lợi để các chương trình ứng dụng do người sử dụng viết ra có thể chạy được
trên máy tính.

II.

Tổng quan về Keylogger

1. Keylogger là gì

Keylogger thường là một phần mềm nhỏ gọn – hoặc đôi lúc nguy hiểm hơn
thậm chí là một thiết bị phần cứng – với khả năng ghi lại mọi phím bấm mà người
dùng đã nhấn trên bàn phím. Tổng hợp kết quả của các tổ hợp phím này, kẻ cài đặt
Keylogger có thể thu được tin nhắn cá nhân, nội dung email, số thẻ tín dụng và dĩ
nhiên nguy hiểm nhất là mọi loại mật khẩu.
2. Những thông tin Keylogger có thể thu thập?
Tùy từng loại keylogger và mục đích của người tạo ra nó mà nó có những khả
năng khác nhau, nhưng khi được gắn trên thiết bị, nó thường có thể thực hiện các
thao tác sau:

• Ghi lại bất kỳ mật khẩu nào được người dùng nhập trên thiết bị.
• Chụp ảnh màn hình của thiết bị theo chu kỳ nhất định.
• Ghi lại các URL mà người dùng đã vào trình duyệt, thậm chí chụp ảnh các
trang web người dùng đã xem.
SVTH: Trịnh Minh Triều

5


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Ghi lại danh sách các ứng dụng người dùng chạy trên thiết bị.
Chụp bản ghi của tất cả tin nhắn tức thời (Zalo, Facebook Messenger, Skype,
…).
• Chụp bản sao email đã gửi.
• Tự động gửi báo cáo chứa các bản ghi được lưu trữ và gửi email đến một địa
điểm từ xa thông qua email, FTP, HTTP.
Hầu hết các keylogger không chỉ ghi lại những thao tác bàn phím của người
dùng mà còn có thể chụp màn hình máy tính. Keylogger có thể lưu trữ dữ liệu mà
nó thu thập được ngay trên ổ cứng của người dùng hoặc tự động truyền qua mạng
tới máy tính từ xa hoặc Web Server.
3. Cách thức hoạt động Keylogger



Keylogger dưới dạng phẩn mềm thường chạy ngầm trên máy, ghi lại mọi phím
bấm mà người dùng nhập vào. Đôi lúc để tránh việc gửi dữ liệu thường xuyên khiến
việc theo dõi bị người dùng “chú ý”, các gói phần mềm này có thể được thiết kế để

chỉ gửi đi các chuỗi dữ liệu có vẻ hữu dụng – chẳng hạn như một chuỗi số “có vẻ”
giống mã tín dụng.
Để tăng tính hiệu quả, keylogger cũng thường được kết hợp với một số loại phần
mềm theo dõi khác, nhờ vậy kẻ xâm nhập có thể phân biệt được các thông tin mà
người dùng nhập vào khi chat chit vô nghĩa với các thông tin nhập vào khi đang
đăng nhập vào tài khoản ngân hàng trực tuyến. Các chuỗi kí tự đầu tiên người dùng
nhập vào sau khi khởi động một chương trình chat, email client hay game online
cũng rất quan trọng – bởi đây thường là chuỗi username và pasword dùng để đăng
nhập vào tài khoản của dịch vụ đó.
Với những trường hợp cần được “chăm sóc” tỉ mỉ hơn, kẻ cài đặt keylogger
thường sẽ phải sử dụng công cụ để quét qua toàn bộ file log ghi lại tất cả những gì
người dùng đã nhập vào trong suốt thời gian bị theo dõi, từ đó lọc ra cả những
thông tin như nội dung tìm kiếm Google, comment trong một topic, … Thường thì
các gói phần mềm theo dõi cung cấp cho các bật phụ huynh và các công sở còn
được tích hợp cả tiện ích chụp ảnh màn hình. Từ đó cung cấp đầy đủ thông tin và
bằng chứng về những gì mà “nạn nhân” đã làm trong suốt quá trình sử dụng máy.
4. Cách Keylogger xâm nhập vào máy tính
Trong đa số trường hợp, keylogger được các malware cài đặt một cách âm thầm
lên máy người dùng sau khi thâm nhập thành công. Một số trường hợp khác có
phần ít gặp hơn là khi cha mẹ muốn quản lý truy cập của con cái, khi các quản lý
của một công ty muốn kiểm tra thái độ làm việc của nhân viên công ty, …
Như đã nói ở trên, đa số keylogger trên các máy tính phổ thông được phát tán
qua các malware. Nếu máy tính của người dùng đã bị thâm nhập, đoạn mã độc này
có thể mang sẵn trong mình chức năng của một phần mềm keylogger nhỏ gọn –
hoặc nó có thể hoạt động như một Trojan, tiến hành tải về và cài đặt gói keylogger
SVTH: Trịnh Minh Triều

6



Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

một cách âm thầm. Thường thì các malware cũng sẽ tự động thiết lập một kênh để
gửi thông tin mà keylogger thu được về cho “chủ nhân”. Có thể nói keylogger là
một trong những công cụ được tin tặc ưa chuộng nhất bởi chúng có thể thu được
mọi loại thông tin của người dùng bằng phương pháp này.

CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
I.
1.
2.
-

II.

Phân tích yêu cầu
Yêu cầu về chức năng
Keylogger là một chương trình gián điệp cơ bản phải có các chức năng như:
Chạy ứng dụng nền, chiếm ít tài nguyên hệ thống.
Khởi động cùng hệ thống.
Ghi lại các phím đã bấm và gửi chúng lên server đã thiết lập từ trước.
Yêu cầu về tương thích
Ứng dụng phải hoạt động được trên nền Windows.
Chiếm ít dung lượng lưu trữ, dung lượng RAM khi hoạt động.
Chiếm băng thông ít khi gửi file log lên server.

Thiết kế hệ thống


1. Kỹ thuật Hook
a. Hook là gì?

Hook là một cơ chế mà một ứng dụng có thể chặn các sự kiện như các thông
điệp, thao tác chuột, thao tác phím, …
Hàm dùng để chặn một loại sự kiện riêng biệt được gọi là hook proceduce /
hook function.
Mỗi khi nhận được sự kiện, hoook proceduce có thể thay đổi và thậm chỉ hủy bỏ
sự kiện đó.
b. Ứng dụng của Hook
- Cho phép tạo ra các chương trình hỗ trợ gõ tiếng Việt như Unikey, EVKey,

- Tạo ra các chương trình test tự động phần mềm.
- Tạo ra các chương trình thay đổi giao diện ứng dụng đang chạy.
- Bắt và giả lập các thông điệp bàn phím, chuột.
- Cung cấp phím chức năng trợ giúp cho ứng dụng.
- Tạo ra các chức năng debug, …
c. Các kiểu Hook
Tùy vào tham số được gọi trong hàm cài đặt hook và cách thức xử lý sự kiện, có
các kiều Hook:
o WH_CALLWNDPROC: Xử lý hoặc định nghĩa tất cả các thông điệp của hệ
thống mỗi khi SendMessage được gọi.
o WH_GETMESSAGE: Xử lý hoặc định nghĩa tất cả các thông điệp của hệ
thống mỗi khi GetMessage hoặc PeekMessage được gọi.

SVTH: Trịnh Minh Triều

7



Đồ Án Cơ Sở Ngành Mạng
o
o
o
o
o

o
o
o

o
o
o
2.

GVHD: Phạm Minh Tuấn

WH_JOURNALPLAYBACK và WH_JOURNALRECORD: Thu và phát lại
các sự kiện keyboard và mouse.
WH_KEYBOARD: Xử lý, định nghĩa hoặc hủy bỏ tất cả các sự kiện bàn
phím.
WH_MOUSE: Xử lý, định nghĩa hoặc hủy bỏ tất cả các sự kiện chuột.
WH_SYSMSGFILTER: Xử lý hoặc định nghĩa tất cả các thông điệp cho
dialog box, message box, scroll bar, hoặc menu của hệ thống.
WH_SHELL: Một ứng dụn có thể sử dụng móc WH_SHELL để nhận thông
báo quan trọng, hệ thống gọi một thủ tục móc WH_SHELL khi ứng dụng
được kích hoạt và khi một cửa sổ cấp cao nhất được tạo ra hoặc bị phá hủy.
WH_MOUSE_LL: Cho phép bạn theo dõi các sự kiện đầu vào chuột về để
được đăng trong một chủ đề hàng đợi đầu vào.

WH_KEYBOARD_LL: Cho phép bạn theo dõi các sự kiện đầu vào bàn
phím sắp được đăng trong một chủ đề hàng đợi đầu vào.
WH_CALLWNDPROCRET: hook cho phép bạn theo dõi tin nhắn được gửi
đến cửa sổ, hệ thống gọi một thủ tục hook WH_CALLWNDPROC trước khi
đi qua các tin nhắn đến cửa sổ tiếp nhận, và gọi cá thủ tục móc
WH_CALLENDPROCRET sau khi các thủ tục cửa sổ đã xử lý tin nhắn.
WH_CBT: Đặt một thủ tục hook nhận những thông báo có ích tới ứng dụng
huấn luyện trên cơ sở tính toán (CBT).
WH_DEBUG: Đặt một thủ tục hook có ích cho việc debug những thủ tục
hook khác.
WH_FOREGROUNDIDLE: Cho phép bạn thực hiện các nhiệm vụ ưu tiên
thấp trong thời kì khi đề tiền cảnh của nó là nhàn rỗi.
Thiết kế chương trình

Hình 1. Sơ đồ hoạt động Keylogger

SVTH: Trịnh Minh Triều

8


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Chương trình được chia làm 2 phần chính:
a. Hook phím và lưu file log

Chương trình sẽ kiểm tra hết tất cả các tiến trình đang chạy, lấy mã PID của
chương trình hiện hành và gọi tới hàm để hook phím, tuy nhiên hook phím này vẫn

trả lại phím cho hệ thống chứ không nuốt luôn phím.
Khi hook được phím, chương trình sẽ kiểm tra xem phím nào được bấm và lưu
thành file txt trên ổ đĩa cứng.
b. Gửi file lên mail – server

Chương trình sẽ dùng thư viện Timer trong .Net để kiểm tra thời gian, trong một
khoảng thời gian cài đặt trước chương trình sẽ gửi file log lên mail – server đã được
thiết lập trước. Chương trình sẽ có chức năng để kiểm tra có kết nối hay không mới
gửi file lên mail.
3. Thuật toán

Bước 1: Tạo các khóa register để khởi chạy cùng hệ thống
Bước 2: Lấy các tiến trình hiện tại, tạo một cho chương trình một tiến trình.
Bước 3: Sử dụng SetWindowsHookEx tiêm chương trình vào sâu hệ thống.
3.1: Lấy phím đã nhấn, lưu vào file.
3.2 Trả lại phím đã nhấn cho tiến trình cần phím.
Bước 4: Khởi tạo thời gian gửi lên server
4.1: Có internet cứ 30s gửi lên mail – server một lần
4.2: Không có internet qua lại bước 3.1

CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
I.

Triển khai

Vì trong khuôn khổ đồ án, em chỉ đóng gói chương trình keylogger thành một
chương trình bình thường với file exe. Khi khởi chạy chương trình, chương trình sẽ
tạo 1 register startup để khởi động cùng hệ thống, và chương trình sẽ chạy nền làm
cho chúng ta khó phát hiện.


II.

Đánh giá kết quả

1. Kết quả chương trình

SVTH: Trịnh Minh Triều

9


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Hình 2. File log

Hình 3. Keylog nằm trong startup windows
2. Ưu điểm
• Chương trình ghi lại được các phím đã nhấn gửi lên mail – server liên tục

trong khoảng thời gian định trước thuận tiện cho việc theo dõi, giám sát
người sử dụng máy tính.
• Khởi chạy cùng hệ thống, giúp cho chương trình luôn luôn được khởi chạy

3.





khi máy tính bật lên.
Chạy nền, người sử dụng máy tính khó biết mình bị giám sát.
Nhược điểm
Là một chương trình đơn giản, phải được cài đặt trực tiếp.
Máy tính phải có kết nối internet mới gửi file log ra ngoài.
Không điều khiển từ xa được.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
I.

Kết luận

Hiểu biết về hệ điều hành sâu hơn, cũng như tìm hiểu rõ về các kỹ thuật Hook,
cách thức hook phím, một số thư viện API có sẵn trong Windows, cách thức hệ điều
hành làm việc với các phím.

SVTH: Trịnh Minh Triều

10


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Chương trình thực hiện được yêu cầu của bài toán là lưu lại các phím đã bấm,
thực hiện được gửi file log lên mail – server, chạy nền, khởi động cùng hệ thống,
khó phát hiện khi chương trình đang chạy.
II.


Hướng phát triển

Trong tương lai em sẽ cố gắng hoàn thiện thêm một số chức năng cho
Keylogger, để Keylogger này thực hiện nhiều tác vụ hơn, mã hóa file khi gửi đi, ẩn
sâu trong hệ thống hơn.
Thêm các chức năng cho chương trình như chụp ảnh màn hình trong một
khoảng thời gian đã đặt trước, có thể điều khiển từ xa thông qua internet. Chạy
chương trình dưới dạng service của hệ thống windows..

SVTH: Trịnh Minh Triều

11


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

PHẦN 2: LẬP TRÌNH MẠNG
TIÊU ĐỀ: Chương trình DHCP Server
GIỚI THIỆU ĐỀ TÀI
Ngày nay, sự phát triển công nghệ thông tin đang diễn ra mạnh mẽ, các máy
tính càng cần thiết để kết nối với nhau để thực hiện các công việc nội bộ, cũng như
liên kết các cơ quan, xí nghiệp, cộng đồng người lại với nhau, phục vụ đời sống con
người hiệu quả cao. Các máy tính trong mạng nhận ra nhau nhờ vào địa chỉ IP mà
trước đó người quản trị mạng phải gán cho từng máy tính một. Mỗi thiết bị trên
mạng có một địa chỉ IP duy nhất để truy cập mạng và sử dụng các tài nguyên.
DHCP tập trung việc quản lý địa chỉ IP ở các máy tính trung tâm chạy
chương trình DHCP. Mặc dù có thể gán địa chỉ IP vĩnh viễn cho bất cứ máy tính nào
trên mạng, DHCP cho phép gán tự động. Để client có thể nhận địa chỉ IP từ máy

chủ DHCP, ta khai báo cấu hình để client “nhận địa chỉ tự động từ một máy chủ”.
Phải có ít nhất một máy chủ DHCP trên mạng.
Máy chủ DHCP tự động cho người dung thuê địa chỉ IP khi họ vào mạng.
DHCP sẽ tự động quản lý các địa chỉ IP và loại bỏ được các lỗi có thể làm mất liên
lạc. Nó tự động gán các địa chỉ chưa được sử dụng. DHCP cho thuê địa chỉ IP trong
một khoảng thời gian, có nghĩa là những địa chỉ này sẽ còn dung được cho các hệ
thống khác.
Với sự cần thiết của DHCP như trên, đề tài DHCP server sẽ làm sáng tỏ ý
nghĩa của việc dùng DHCP server và các vấn đề của dịch vụ DHCP server, cơ chế
hoạt động của dịch vụ DHCP.

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
I.

Lý thuyết mạng máy tính

1. Mạng máy tính
Mạng máy tính là tập hợp các máy tính độc lập, kết nối với nhau thông qua các
đường truyền vật lý và cùng tuân thủ một nguyên tắc truyền thông nào đó. Mạng
phải có các giao thức là một tập hợp các quy tắc chuẩn dành cho việc biểu diễn dữ
liệu, phát tín hiệu, chứng thực và phát hiện lỗi dữ liệu, nhờ đó mà các máy tính có
thể kết nối và trao đổi thông tin với nhau một cách tin cậy. Một số giao thức như:
TCP/IP, UDP, HTTP, FTP, SMTP, …
Có rất nhiều tiêu chí để phân loại mạng máy tính, có thể dựa vào loại máy kết
nối, có thể dựa vào đặc điểm đường truyền và cũng có thể dựa vào nguyên tắc
truyền thông như WAN, LAN, GAN, internet, …
Mạng máy tính có thể được khi thác dựa vào 2 mô hình ứng dụng chính: mô
hình mạng ngang hang (P2P) và mô hình khách - chủ (Client-Server).
2. Mô hình Client-Server
SVTH: Trịnh Minh Triều


12


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Mô hình client-server là một mô hình nổi tiếng trong mạng máy tính, được áp
dụng rất rộng rãi. Ý tưởng của mô hình này là máy khách gửi một yêu cầu (request)
đến máy chủ, máy chủ sẽ chờ xử lý và trả về kết quả cho máy khách (response).
Trong này một Server có thể phục vụ rất nhiều Client.

Request
Response
Hình 4. Client - Server

Client

II.

Server

Tổng quan về DHCP

1. Khái niệm DHCP
DHCP (Dynamic Host Configuration Protocol): là giao thức cấu hình Host
động, được thiết kế nhằm làm giảm thời gian chỉnh cấu hình cho mạng TCP/IP bằng
cách tự động gán địa chỉ IP cho các máy khách (client) khi tham gia vào mạng
(client-server).

DHCP được phát triển bởi tổ chức IETF (Interner Engineering Task Force) – tổ
chức chuyên nghiên cứu về các giao thức được sử dụng trên Internet.
2. Ý nghĩa việc sử dụng
- Tự động cấp phát địa chỉ IP phù hợp cho máy trạm khi vào mạng, tự động
quản lý các địa chỉ IP và loại bỏ được các lỗi làm mất liên lạc như tình trạng
nhầm lẫn hay trùng lặp địa chỉ IP, đồng thời giảm thiểu chi phí quản trị cho
hệ thống mạng.
- Phù hợp cho các máy tính thường xuyên di chuyển qua lại giữa các mạng.
SVTH: Trịnh Minh Triều

13


Đồ Án Cơ Sở Ngành Mạng
-

GVHD: Phạm Minh Tuấn

Giúp cho các nhà cung cấp dịch vụ (ISP) tiết kiệm được số lượng địa chỉ IP
thật (public IP).
Kết hợp với hệ thống mạng không dây (Wireless) cung cấp các điểm Hotspot
như: nhà ga, sân bay, trường học, …

CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
I.











Một số thuật ngữ thường dùng trong DHCP
DHCP Client – máy trạm DHCP: là một thiết bị nối vào mạng và sử dụng
giao thức DHCP để lấy các thông tin cấu hình như là địa chỉ mạng, địa chỉ
máy chủ DNS.
DHCP Server – máy chủ DHCP: là một thiết bị nối vào mạng có chức năng
trả về các thông tin cần thiết cho máy trạm DHCP khi có yêu cầu.
DHCP Replay Agent: là một máy tính hoặc một Router được cấu hình để
lắng nghe và chuyển tiếp các gói tin giữa DHCP Client và DHCP Server từ
subnet này sang subnet khác.
DHCP Scope: là một khoảng IP hợp lệ mà ta đã xác định trên DHCP Server,
dùng để cung cấp cho các client có yêu cầu thuê địa chỉ.
Scope Options: là các tùy chọn để cấu hình cho scope mà DHCP Server có
thể bổ sung thêm vào thông tin đi cùng với địa chỉ IP cho thuê. Chẳng hạn,
chúng ta có thể cấu hình một scope để cung cấp làm Default gateway.
Client Reservation: là các IP đặt trước mà DHCP Server thường xuyên cung
cấp đến một máy và máy này cần có một địa chỉ IP cố định (như là DNS
Server hoặc là Print Server, lúc này các máy khác sẽ cấu hình để connect tới
DNS server bằng địa chỉ của DNS server này).

SVTH: Trịnh Minh Triều

14


Đồ Án Cơ Sở Ngành Mạng


II.

GVHD: Phạm Minh Tuấn

Một số thông điệp DHCP

Hình 4. DHCP Message Format
1. DHCP Discover

Khi lần đầu tiên máy khách DHCP cố gắng truy cập vào mạng, nó yêu cầu thông
tin địa chỉ IP từ một máy chủ DHCP bằng cách phát ra một thông điệp DHCP
Discover. Địa chỉ IP nguồn trong thông điệp là 0.0.0.0 bởi vì máy trạm chưa có địa
chỉ IP. Thông báo này chứa 342 hoặc 576 byte, phiên bản cũ của Windows sử dụng
khung dạng thông điệp dài hơn.
SVTH: Trịnh Minh Triều

15


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

2. DHCP Offer

Mỗi máy chủ DHCP Server nhận thông điệp DHCP Discover của máy khách,
đáp ứng bằng thông điệp DHCP Offer chứa địa chỉ IP chưa được cấp và thông tin
cấu hình TCP/IP bổ sung như subnet mask, default gateway. Nếu có nhiều hơn một
máy chủ DHCP thì mỗi máy chủ DHCP sẽ gửi một thông điệp DHCP Offer. Client

sẽ chấp nhận thông điệp DHCP Offer đầu tiên mà nó nhận được. Độ dài của thông
điệp là 342 byte.
3. DHCP Request
Khi DHCP Client nhận được một thông điệp DHCP Offer, nó sẽ trả lời bằng
cách phát một thông điệp DHCP Request có chứa địa chỉ IP được cung cấp và chấp
nhận địa chỉ IP này. Thông điệp này dài 342 hoặc 576 byte, tùy thuộc vào độ dài của
thông điệp DHCP Discover tương ứng.
4. DHCP Acknowledge (DHCP ACK)
DHCP Server đã được chọn chấp nhận thông điệp DHCP Request cho địa chỉ IP
bằng cách gửi một thông điệp DHCP ACK. Tại thời điểm này máy chủ cũng gửi các
thông số cấu hình tùy chọn. Khi nhận được DHCP ACK, client có thể tham gia vào
mạng TCP/IP và hoàn tất quá trình khởi động hệ thống. Thông điệp dài 342 byte.
5. DHCP Nack
Nếu địa chỉ IP này không thể sử dụng cho client vì nó không còn giá trị hoặc
đang được sử dụng bởi một client khác, DHCP Server phản hồi với thông điệp
DHCP Nack và client bắt đầu lại quá trình thuê địa chỉ khác. Bất cứ khi nào DHCP
Server nhận được một yêu cầu cho một địa chỉ IP không hợp lệ theo phạm vi được
cấu hình, nó sẽ gửi một thông điệp DHCP Nack tới client.
6. DHCP Decline
Nếu DHCP client xác định được tham số cấu hình là không hợp lệ, nó sẽ gửi
một thông điệp DHCP Deline tới máy chủ, và client phải bắt đầu quá trình cho thuê
lần nữa.
7. DHCP Release
Một máy khách gửi DHCP Release đến máy chủ để giải phóng địa chỉ IP và hủy
bỏ bất kỳ lease nào.
8. DHCP Inform
DHCP Inform là một thông điệp mới, được định nghĩa trong RFC 2131, được sử
dụng bởi các máy tình trong mạng để yêu cầu và lấy thông tin từ DHCP server sử
dụng trong cấu hình cục bộ. Khi thông điệp này được sử dụng, người gửi đã được
cấu hình địa chỉ IP trên mạng. Loại thông điệp này không được cung cấp trong các

phiên bản trước của Windows NT Server và có thể không được nhận dạng bởi các
phần mềm DHCP do các bên thứ ba thực hiện.
SVTH: Trịnh Minh Triều

16


Đồ Án Cơ Sở Ngành Mạng

III.

GVHD: Phạm Minh Tuấn

Cơ chế hoạt động của DHCP

1. Sơ đồ thuật toán

Bước 1: Nhập vào địa chỉ IP đầu, cuối, subnet mask, IP gateway, thời gian cấp IP
cho client.
Bước 2: Kiểm tra các thông tin nhập vào.
+ Nếu sai quay về bước 1.
+ Nếu đúng, tạo mảng lưu trữ dãi IP vừa nhập, chuyển qua bước 3.
Bước 3: Lắng nghe các gói tin từ client gửi lên. Nếu có gói tin gửi đến tạo luồng
chuyển qua bước 4. Tiếp tục lắng nghe.
Bước 4: Khi có gói tin gửi đến.
4.1 Kiểm tra gói tin gì.
4.2 Gắn các thông tin bước 1 đã nhập.
4.3 Tạo các option cần thiết.
4.4 Xây dựng dữ liệu cần thiết trong khuôn mẫu gói tin DHCP Message.
4.5 Đóng gói gói tin.

Bước 5: Gửi gói tin đi.
2. Cơ chế hoạt động
DHCP là một giao thức có nguồn gốc từ BOOTP (Bootstrap Protocol), được
dùng để cấu hình cho các máy trạm khởi động mà không cần đĩa cứng, BOOTP thi
hành các công việc sau:
+ Tìm kiếm địa chỉ IP cho chính nó.
+ Tìm IP của BOOTP server.
+ Nạp một file khởi động từ server vào bộ nhớ.
+ Bắt đầu khởi động.
DHCP khai thác ưu điểm của giao thức truyền tin và các kỹ thuật khai báo
cấu hình được định nghĩa trong BOOTP, trong đó có khả năng tìm kiếm và gán địa
chỉ IP cho nhiều mạng con. DHCP làm việc theo mô hình client – server theo giao
thức UDP. Theo đó, quá trình tương tác giữa DHCP client và server diễn ra thông
qua các gói tin:
+ DHCP Discover
+ DHCP Offer
+ DHCP Request
+ DHCP Ack
Ta có thể nói ngắn gọn hơn cơ chế hoạt động của DHCP là: Khi một DHCP
client khởi động sẽ gửi cho server một thông điệp, DHCP server sẽ tìm một IP còn
rỗi trong dãy IP để cấp cho client, sau đó đưa ra một thông điệp trên toàn mạng về
địa chỉ IP của client đó.
Cụ thể như sau:
DHCP Discover:
SVTH: Trịnh Minh Triều

17


Đồ Án Cơ Sở Ngành Mạng


GVHD: Phạm Minh Tuấn

Đầu tiên máy client sẽ gửi đi một gói tin quảng bá tên là DHCP Discover,
nhằm yêu cầu cho việc lấy các thông tin cấu hình như IP address, Subnet mask,
Default getway, Preferred DNS, … Lúc này, vì client chưa có địa chỉ IP cho nên nó
sẽ dùng một địa chỉ source (nguồn) là 0.0.0.0, đồng thời nó cũng không biết địa chỉ
của DHCP server nên client sẽ gửi đến một địa chỉ broadcast là 255.255.255.255 và
sau đó gói tin DHCP Discover này sẽ quảng bá đi toàn mạng. Gói tin này chứa một
địa chỉ MAC (là địa chỉ mà mỗi một network adapter được nhà sản xuất cấp cho và
là mã số để phân biệt các card mạng với nhau). Ngoài ra nó còn chứa tên của máy
client để server có thể biết được client nào đã gửi yêu cầu đến.

Hình 5. DHCP Discover packet

DHCP Offer:
Sau khi nhận được gói tin DHCP Discover của client, nếu có một DHCP
Server hợp lệ (có khả năng cung cấp địa chỉ IP cho client) thì nó sẽ trả lời bằng một
gói tin DHCP Offer, gói tin này chứa một địa chỉ IP đề nghị cho thuê trong một
khoảng thời gian nhất định, kiềm theo địa chỉ MAC của client được cấp, một subnet
mask và địa chỉ IP của DHCP Server đã cấp phát. Trong thời gian này server sẽ
không cấp phát địa chỉ IP vừa đề nghị cho một client nào khác.

SVTH: Trịnh Minh Triều

18


Đồ Án Cơ Sở Ngành Mạng


GVHD: Phạm Minh Tuấn

Hình 6. DHCP Offer packet

DHCP Request:
Máy client sau khi nhận được những lời đề nghị là các gói tin DHCP Offer
trên mạng (trường hợp có nhiều hơn 1 DHCP server) sẽ tiến hành chọn lọc một gói
tin phù hợp và sau đó phản hồi lại bằng một gói tin DHCP Request (bao gồm thông
tin về DHCP Server cấp phát địa chỉ cho nó) để chấp nhận lời đề nghị đó. Điều này
giúp cho việc các gói tin còn lại không được chấp nhận sẽ được các Server rút lại và
dùng để cấp phát cho Client khác.

SVTH: Trịnh Minh Triều

19


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Hình 7. DHCP Request packet

DHCP Ack:
Khi DHCP Server nhận được gói tin DHCP Request, nó sẽ trả lời lại DHCP
client bằng một gói tin là DHCP Ack nhằm mục đích thông báo là đã chấp nhận cho
DHCP client đó thuê địa chỉ IP. Gói tin này bao gồm địa chỉ IP và các thông tin cấu
hình khác (DNS Server, WINS Server, …). Cuối cùng client nhận được gói tin
DHCP Ack thì cũng có nghĩa là kết thúc quá trình thuê và cấp phát địa chỉ IP. Và địa
chỉ IP này chính thức dược client sử dụng.


SVTH: Trịnh Minh Triều

20


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Hình 8. DHCP ACK packet

Tất cả việc trao đổi thông tin giữa một DHCP server và DHCP client sẽ sử dụng
giao thức UDP để truyền các gói tin tại 2 cổng 67 và 68 dành cho việc truyền dữ
liệu đến server và client.
3. Cơ chế tự động refresh lại thời gian đăng ký (lease time)
Bây giờ ta coi như là DHCP client đã đăng ký được một IP address rồi. Nếu như
mặc định (8 ngày) thì một DHCP client sau một khoảng thời gian là 50% (sau 4
ngày) nó sẽ tự động xin lại IP address với DHCP mà nó đã xin ban đầu. DHCP
client lúc này sẽ gửi một DHCP Request trực tiếp (unicast) đến DHCP server mà nó
đã xin ban đầu.

SVTH: Trịnh Minh Triều

21


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn


Hình 9. DHCP Request leasetim

Nếu mà DHCP server đó “còn sống”, nó sẽ trả lời bằng một gói DHCP Ack
dể renew (cho thuê mới lại) tới DHCP client, gói này bao gồm các thông số cấu
hình mới cập nhật nhất trên DHCP server. Nếu DHCP server “đã chết”, thì DHCP
client này sẽ tiếp tục sử dụng cấu hình hiện thời của nó.

SVTH: Trịnh Minh Triều

22


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Hình 10. DHCP Ack leasetime

Và nếu sau 87.5% thời gian thuê hiện thời của client, nó sẽ broadcast một
DHCP Discover để update địa chỉ IP của nó. Vào lúc này, nó không kiếm tới DHCP
server ban đầu cho nó thuê nữa mà nó sẽ chấp nhận bất cứ một DHCP server nào
khác.
Nếu thời gian đăng ký đã hết, thì client sẽ ngay lập tức dừng lại việc sử dụng
IP address đã đăng ký trước đó. Và DHCP client sau đó sẽ bắt đầu quá trình thuê địa
chi như ban đầu
Chú ý: khi chúng ta khởi động lại (restart) DHCP client thì nó sẽ tự động renew lại
IP address mà trước khi nó shutdown.
4. DHCP Relay Agent
- DHCP Relay Agent là một máy tính hoặc một Router được cấu hình để lắng

nghe và chuyển tiếp các gói tin giữa DHCP Client và DHCP Server từ subnet
này sang subnet khác.
- DHCP Relay Agent là bộ trung chuyển DHCP Discover (hoặc DHCP
Request) đến DHCP server, DHCP Relay Agent cho phép forward các truy
vấn của DHCP client đến DHCP server và trả lại IP cho client (làm nhiệm vụ
như Proxy).
- Trong trường hợp DHCP client và DHCP server không nằm cùng subnet và
được kết nối qua bộ định tuyến (router) thì phải có giải pháp cho phép truy
SVTH: Trịnh Minh Triều

23


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

vấn DHCP client vượt qua router để đến DHCP server. DHCP Relay Agent
được dùng cho mục đích này. DHCP Relay Agent là một thực thể trung gian
cho phép chuyển tiếp (relay) các DHCP Discover (hoặc DHCP Request), mà
thường bị chặn ở ngay router, từ DHCP client đến DHCP server.

CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
I.

Triển khai

1. Cơ chế truyền theo UDP

UDP là viết tắt của cụm từ User Datagram Protocol. UDP là một phần của bộ

giao thức Internet được sử dụng bởi các chương trình chạy trên các máy tính khác
nhau trên mạng. Không giống như TCP/IP, UDP được sử dụng để gửi các gói tin
ngắn gọi là datagram, cho phép truyền nhanh hơn. Tuy nhiên, UDP không cung cấp
kiểm tra lỗi nên không đảm bảo toàn vẹn dữ liệu.
DHCP Server lắng nghe trên port 67 UDP, và gửi dữ liệu đến client sử dụng port
68 UDP và ngược lại.
2. Cách thức hoạt động của chương trình
Chương trình sẽ tạo ra nhiều luồng để lắng nghe các thông điệp. Khi có thông
điệp được gửi tới, chương trình sẽ chờ và nhận hết các thông điệp đó thông qua
phương thức gọi lại. Khi các thông điệp được nhận đầy đủ, chương trình sẽ phân
tích thông điệp để tìm loại thông điệp được nhận tương ứng. Chương trình sẽ gửi
thông điệp tương ứng với thông điệp vừa nhận. Nó sẽ thêm các options liên quan
đến thông điệp đó, và tổng hợp các options riêng lẽ thành một thông điệp và gửi đi.
Việc gửi đi cũng gọi thông qua phương thức gọi lại để tất cả các thông điệp được
gửi đi tất cả.

SVTH: Trịnh Minh Triều

24


Đồ Án Cơ Sở Ngành Mạng

GVHD: Phạm Minh Tuấn

Hình 11. Sơ đồ hoạt động của DHCP Server
3. Luồng dữ liệu

DHCP sử dụng giao thức UDP để truyền dữ liệu nên chương trình sẽ sử dụng
luồng byte để truyền nhận dữ liệu, sử dụng lớp BinaryReader được định nghĩa

bởi .Net, chúng ta sẽ đặt các byte vào các vị trí thích hợp của các gói tin DHCP.
Cấu trúc một gói tin DHCP được định nghĩa tại RFC 2131.
public struct DHCPstruct
{
public byte D_op;
//Op code: 1 = bootRequest, 2 = BootReply
public byte D_htype;
//Hardware Address Type: 1 = 10MB ethernet
public byte D_hlen;
//hardware address length: length of MACID
public byte D_hops;
//Hw options
public byte[] D_xid;
//transaction id (5),
public byte[] D_secs;
//elapsed time from trying to boot (3)
public byte[] D_flags; //flags (3)
public byte[] D_ciaddr; // client IP (5)
public byte[] D_yiaddr; // your client IP (5)
public byte[] D_siaddr; // Server IP (5)
public byte[] D_giaddr; // relay agent IP (5)
public byte[] D_chaddr; // Client HW address (16)
public byte[] D_sname; // Optional server host name (64)
public byte[] D_file;
// Boot file name (128)

SVTH: Trịnh Minh Triều

25



×