Tải bản đầy đủ (.pdf) (28 trang)

ĐỀ TAI: Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP pot

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 (569.42 KB, 28 trang )

BỘ MÔN MẠNG VÀ TRUYỀN THÔNG








ĐỀ TÀI

Ứng dụng giao thức ICMP để xây dựng
chương trình Scan IP







Võ Duy Dũng
Lớp 07T4 – Nhóm 09B

1 Bộ môn Mạng và Truyền Thông
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
……………………………………………………………………………………
….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….


……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
……………………………………………………………………………………….
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 2
……………………………………………………………………………………….
……………………………………………………………………………………
MỤC LỤC
CHƯƠNG I: CƠ SỞ LÝ THUYẾT 4
I. Giới thiệu TCP/IP 4
1. Các lớp trong mô hình TCP/IP 4
2. Các bước đóng gói dữ liệu trong mô hình TCP/IP 5

3. Một số giao thức cơ bản trong mô hình TCP/IP 5
II. Giao thức ICMP 11
1. Giới thiệu ICMP 11
2. Cấu trúc 12
3. Danh sách các thông điệp điều khiển của giao thức ICMP 13
CHƯƠNG II: THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH 16
I. Phân tích yêu cầu 16
II. Phân tích các chức năng 16
1. Phương thức hoạt động của ứng dụng: 16
2. Xây dựng chức năng: 16
III. Xây dựng các chức năng 17
CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 19
I. Môi trường triển khai 19
1. Hệ thống 19
2. Phần mềm 19
II. Kết quả các chức năng của chương trình: 19
1. Giao diện chính của chương trình: 19
2. Chức năng quét địa chỉ của chương trình: 20
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
3 Bộ môn Mạng và Truyền Thông
Code chương trình: 21
1. Lớp ICMP.cs: Xử lý gói tin ICMP 21
2. Lớp Kiemtra.cs: Kiểm tra thông tin trả về của gói tin ICMP 22
3. Form1.cs: Xử lý sự kiện trên Winform 23
DANH MỤC HÌNH VẼ
Hình 1.1. Mô hình TCP/IP 4
Hình 1.2. Các bước đóng gói trong mô hình TCP/IP 5
Hình 1.3. Các giao thức khác nhau TCP/IP 6
Hình 1.4. ARP Header 6
Hình 1.5. IP Header 7

Hình 1.6. Vị trí của ICMP message 8
Hình 1.7. ICMP Header 8
Hình 1.8. IGMP Header 8
Hình 1.9. UDP Header 9
Hình 1.10. Cách thiết lập kết nối giao thức 10
Hình 1.11. Truyền, nhận gói tin trong TCP 11
Hình 2.1 Cấu trúc gói tin ICMP 13
Hình 3.1 Chương trình trước khi quét 20
Hình 3.2 Quét dãy địa chỉ mà người dùng nhập vào 20
Hình 3.3 Chức năng quét theo lớp 21
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 4
CHƯƠNG I: CƠ SỞ LÝ THUYẾT
I. Giới thiệu TCP/IP
1. Các lớp trong mô hình TCP/IP
Hình 1.1. Mô hình TCP/IP
Mô hình tham chiếu TCP/IP tương tự như kiến trúc OSI, sau đây là một số tính
chất của các lớp trong mô hình tham chiếu TCP/IP:
Lớp Application: quản lý các giao thức, như hỗ trợ việc trình bày, mã hóa và
quản lý cuộc gọi. Lớp Application cũng hỗ trợ nhiều ứng dụng, như : FTP (File
Transfer Protocol), HTTP (Hypertext Transfer Protocol), SMTP (Simple Mail
Transfer Protocol), DNS (Domain Name System), TFTP (Trivial File Transfer
Protocol)
Lớp Transport: đảm nhiệm việc vận chuyển từ nguồn đến đích. Tầng Transport
đảm nhiệm việc truyền dữ liệu thông qua hai nghi thức: TCP (Transmission
Control Protocol) và UDP (User Datagram Protocol)
Lớp Internet: đảm nhiệm việc lựa chọn đường đi tốt nhất cho các gói tin. Nghi thức
được sử dụng chính ở tầng này là nghi thức IP (Internet Protocol)
Lớp Network Interface: có tính chất tương tự như như hai lớp Data Link và
Physical của kiến trúc OSI

Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
5 Bộ môn Mạng và Truyền Thông
2. Các bước đóng gói dữ liệu trong mô hình TCP/IP
Hình 1.2. Các bước đóng gói trong mô hình TCP/IP
3. Một số giao thức cơ bản trong mô hình TCP/IP
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 6
Hình 1.3. Các giao thức khác nhau TCP/IP
a. Giao thức ARP (Address Resolution Protocol) và giao thức RARP
(Reverse Address Resolution Protocol)
Trên một mạng cục bộ hai trạm chỉ có thể liên lạc với nhau nếu chúng biết địa
chỉ MAC của nhau. Như vậy vấn đề đặt ra là phải thực hiện ánh xạ giữa địa chỉ IP
(32 bit) và địa chỉ MAC (48 bit) của một trạm. Giao thức ARP đã được xây dựng
để chuyển đổi từ địa chỉ IP sang địa chỉ MAC khi cần thiết.Khuôn dạng của một
gói tin ARP được chỉ ra trong hình dưới đây:
Hình 1.4. ARP Header
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
7 Bộ môn Mạng và Truyền Thông
Ngược lại, giao thức RARP được dùng để chuyển đổi từ địa chỉ MAC sang địa
chỉ IP.
Khuôn dạng của một gói tin RARP tương tự như khuôn dạng của một gói tin
ARP đã được chỉ ra như trong hình trên. Chỉ khác là ở trường Operation nó sẽ có
giá trị là 3 cho gói tin RARP request và giá trị là 4 cho gói tin RARP reply.
Các giao thức ARP và RARP không phải là bộ phận của IP mà IP sẽ dùng đến
chúng khi cần.
b. Giao thức IP (Internet Protocol)
Giao thức IP là một trong những giao thức quan trọng nhất của bộ giao thức
TCP/IP. Mục đích của giao thức IP là cung cấp khả năng kết nối các mạng con
thành liên mạng để truyền dữ liệu. IP là giao thức cung cấp dịch vụ phân phát
datagram theo kiểu không liên kết và không tin cậy nghĩa là không cần có giai

đoạn thiết lập liên kết trước khi truyền dữ liệu, không đảm bảo rằng IP datagram sẽ
tới đích và không duy trì bất kỳ thông tin nào về những datagram đã gửi đi.
Khuôn dạng đơn vị dữ liệu dùng trong IP được mô tả như sau:
Hình 1.5. IP Header
c. Giao thức ICMP (Internet Control Message Protocol)
- ICMP là một giao thức thông điệp, thường được xem như là một phần của lớp
IP, được dùng để trao đổi các thông tin điều khiển dòng số liệu, thông báo lỗi và
các thông tin trạng thái khác của bộ giao thức TCP/IP.
- Khuôn dạng của một thông điệp ICMP và mối quan hệ của nó với một IP
datagram được minh họa qua hình dưới đây.
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 8
Hình 1.6. Vị trí của ICMP message
Có nhiều loại thông điệp ICMP, mỗi thông điệp ICMP có một khuôn dạng
riêng của nó, mặc dù vậy chúng luôn bắt đầu với 3 trường giống nhau:
Hình 1.7. ICMP Header
• Type (8 bit)
• Code (8 bit)
• Checksum (16 bit)
Có 15 giá trị khác nhau cho trường type, để định nghĩa từng thông điệp ICMP
cụ thể. Một vài loại thông điệp ICMP sử dụng thêm những giá trị khác của trường
code để định nghĩa cho nó.
d. Giao thức IGMP (Internet Group Management Protocol)
IGMP là một giao thức được sử dụng bởi host và router mà hỗ trợ kỹ thuật
multicasting. Giống như ICMP, IGMP thường được xem như là một phần của lớp
IP. Tuy nhiên, IGMP không giống như các giao thức khác, nó là một giao thức
thông điệp có kích thước cố định và không có phần dữ liệu
Hình vẽ sau đây chỉ ra khuôn dạng của một thông điệp IGMP phiên bản 2:
Hình 1.8. IGMP Header
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B

9 Bộ môn Mạng và Truyền Thông

Ý nghĩa các tham số:
• Type (8 bit): định nghĩa loại thông điệp IGMP
• Respond time (8 bit): giá trị thời gian tối đa mà một host phải trả lời một
truy vấn
• Checksum (16 bit): kiểm soát lỗi
• Group address (32 bit): dùng để chỉ định một nhóm cụ thể hay được
thiết lập giá trị 0.0.0.0 để chỉ tất cả các nhóm
e. Giao thức UDP (User Datagram Protocol)
UDP là giao thức không liên kết, cung cấp dịch vụ giao vận không tin cậy, sử
dụng thay thế cho TCP trong tầng giao vận. Khác với TCP, UDP không có chức
năng thiết lập và giải phóng liên kết, không có cơ chế báo nhận (ACK), không sắp
xếp tuần tự các đơn vị dữ liệu (datagram) đến và có thể dẫn đến tình trạng mất
hoặc trùng dữ liệu mà không hề có thông báo lỗi cho người gửi.
Khuôn dạng của UDP datagram được mô tả như sau:
Hình 1.9. UDP Header
Ý nghĩa các tham số:
• Số hiệu cổng nguồn (Source Port - 16 bit): số hiệu cổng nơi đã gửi
datagram
• Số hiệu cổng đích (Destination Port - 16 bit): số hiệu cổng nơi datagram
được chuyển tới
• Độ dài UDP (Length - 16 bit): độ dài tổng cộng kể cả phần header của
gói UDP datagram
• UDP Checksum (16 bit): dùng để kiểm soát lỗi, nếu phát hiện lỗi thì
UDP datagram sẽ bị loại bỏ mà không có một thông báo nào trả lại cho
trạm gửi
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 10
UDP có chế độ gán và quản lý các số hiệu cổng (port number) để định danh duy

nhất cho các ứng dụng chạy trên một trạm của mạng. Do có ít chức năng phức tạp
nên UDP có xu thế hoạt động nhanh hơn so với TCP. Nó thường dùng cho các ứng
dụng không đòi hỏi có độ tin cậy cao trong giao vận.
f. Giao thức TCP (Transmission Control Protocol)
TCP cung cấp kết nối tin cậy giữa hai máy tính, kết nối được thiết lập trước khi
dữ liệu bắt đầu truyền. TCP còn gọi là nghi thức hướng kết nối, với nghi thức TCP
thì quá trình hoạt động trải qua ba bước sau:
• Thiết lập kết nối (Connection establishment)
• Truyền dữ liệu (Data transfer)
• Kết thúc kết nối (Connection termination)
TCP phân chia các thông điệp thành các segment, sau đó nó ráp các segment
này lại tại bên nhận và nó có thể truyền lại những gói dữ liệu nào đã bị mất. Với
TCP thì dữ liệu đến đích là đúng thứ tự, TCP cung cấp Vitual Circuit giữa các ứng
dụng bên gửi và bên nhận.
Giao thức TCP thiết lập một kết nối bằng phương pháp “Bắt tay 3 lần” (three-
way handshake).
Hình 1.10. Cách thiết lập kết nối giao thức
Hình vẽ dưới đây là một ví dụ về cách thức truyền, nhận gói tin bằng giao thức
TCP.
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
11 Bộ môn Mạng và Truyền Thông
Hình 1.11. Truyền, nhận gói tin trong TCP
Giao thức TCP là giao thức có độ tin cậy cao, nhờ vào phương pháp truyền gói
tin, như cơ chế điều khiển luồng (flow control), các gói tin ACK,….
II. Giao thức ICMP
Internet Control Message Protocol (ICMP) là một trong những giao thức cốt
lõi của giao thức Internet Suite . Đó là chủ yếu được sử dụng bởi các hệ điều hành
của máy tính nối mạng để gửi thông báo lỗi cho thấy, ví dụ, một dịch vụ yêu cầu
không có hoặc có một máy chủ hoặc router không thể đạt được. ICMP cũng có thể
được sử dụng để chuyển tiếp tin nhắn truy vấn.

ICMP khác với giao thức vận chuyển như TCP và UDP ở chỗ nó không thường
được sử dụng để trao đổi dữ liệu giữa các hệ thống, cũng không phải là thường
xuyên làm việc của người sử dụng các ứng dụng mạng lưới cấp (với ngoại lệ của
một số công cụ chẩn đoán như ping và traceroute ) .
ICMP cho giao thức Internet phiên bản 4 (IPv4) cũng được gọi là ICMPv4.
IPv6 có một giao thức tương tự, ICMPv6 .
1. Giới thiệu ICMP
Internet Control Message Protocol là một phần của giao thức Internet Suite
được định nghĩa trong RFC 792 . thông điệp ICMP thường được tạo ra để đáp ứng
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 12
với các lỗi trong IP datagrams (theo quy định tại RFC 1122 ), hoặc cho hay định
tuyến nhằm mục đích chẩn đoán. ICMP lỗi luôn luôn được báo cáo với nguồn địa
chỉ IP gốc của gói dữ liệu có nguồn gốc.
Một ví dụ ICMP thông báo lỗi là các Thời gian để nhắn Live vượt quá. Tất cả
các máy (chẳng hạn như một trung gian router ) để chuyển tiếp một gói dữ liệu IP
có để lượng giảm trong thời gian sống (TTL) lĩnh vực của tiêu đề IP một. Nếu
TTL đạt đến 0, một ICMP Thời gian để sống vượt quá cảnh báo được gửi đến các
nguồn của gói dữ liệu này.
Mỗi thông điệp ICMP được đóng gói trực tiếp trong một gói dữ liệu IP duy
nhất, và do đó, giống như UDP , ICMP là không đáng tin cậy .
Mặc dù thông điệp ICMP được chứa trong tiêu chuẩn datagrams IP, các thông
điệp ICMP thường được xử lý như một trường hợp đặc biệt, phân biệt với chế biến
IP bình thường, chứ không phải xử lý như là một giao thức bình thường phụ của
IP. Trong nhiều trường hợp, nó là cần thiết để kiểm tra các nội dung của thông
điệp ICMP và cung cấp những thông báo lỗi thích hợp cho các ứng dụng tạo ra các
gói tin IP ban đầu, một trong đó nhắc việc gửi thông điệp ICMP.
Nhiều tiện ích mạng thông dụng dựa trên thông điệp ICMP. Các lệnh
traceroute được thực hiện bằng cách truyền UDP datagrams với gói tin được đặt
thêm thông số IP TTL, và tìm kiếm ICMP có thời gian sống lớn hơn TTL(ở trên)

và "Destination unreachable" trong quá trình truyền. Các tiện ích ping được thực
hiện bằng cách sử dụng ICMP "Echo Request" và "Echo Reply".
2. Cấu trúc
Các gói tin bắt đầu sau IP header (20 bytes). Tất cả các gói ICMP sẽ có một
header có kích thước 8 byte và phần biến dữ liệu. 4 byte đầu tiên của header này sẽ
được nhất quán. Các byte đầu tiên dành cho trường Type. Các byte thứ hai là cho
trường Code. Các byte thứ ba và thứ tư là trường Checksum. Nội dung của các
byte từ byte thứ 4 của header sẽ khác nhau dựa trên trường Type và Code.
Thông báo lỗi của ICMP có chứa một phần dữ liệu bao gồm toàn bộ các IP
header cộng với các byte đầu tiên của gói tin mà tạo ra các thông báo lỗi khác
nhau. Các gói dữ liệu ICMP sau đó được gói gọn trong một gói IP mới.
• Type - ICMP Code theo quy định dưới đây.
• Code - Kiểu loại hình nhất định.
• Checksum - kiểm tra lỗi dữ liệu. Tính từ ICMP header + dữ liệu, với giá trị
0 cho lĩnh vực này. Thuật toán là giống như tổng kiểm tra tiêu đề cho IPv4.
Bit 0-7 8-15 16-23 24-31
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
13 Bộ môn Mạng và Truyền Thông
0 Loại Mã số Checksum
32 Message
Hình 2.1 Cấu trúc gói tin ICMP
3. Danh sách các thông điệp điều khiển của giao thức ICMP
Type Code Description
0 - Echo Reply 0 Có phản hồi lại (sử dụng để ping)
1 and 2 Dành riêng
3 - Destination Unreachable
0 Điểm đích của mạng không thể truy cập
1 Host đích không thể truy cập
2 Giao thức đích không thể truy cập
3 Cổng đích không thể truy cập

4 Yêu cầu sự phân mảnh , và đặt cở DF
5 Định tuyến nguồn bị lỗi
6 Không biết mạng đich
7 Không biết máy đích
8 Host nguồn bị cô lập
9 Mạng hành chính bị cấm
10 Host hành chính bị cấm
11 Mạng không thể truy cập cho TOS
12 Máy không thể truy cập cho TOS
13 Truyền thông bị cấm
4 - Source Quench 0 Nguồn bị tắt (điều khiển tắc nghẽn)
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 14
5 - Redirect Message
0 Chuyển Datagram cho mạng
1 Chuyển Datagram cho Host
2 Chuyển Datagram cho TOS và mạng
3 Chuyển Datagram cho TOS và host
6 Thay thế địa chỉ host
7 Dành riêng
8 - Echo Request 0 Lặp lại yêu cầu
9 – Router Advertisement 0 Router quảng bá
10 - Router Solicitation 0 Router khám phá/lựa chọn
11 - Time Exceeded
0 TTL hết trong quá trình truyền
1 Xác nhận phân mảnh hết hạn
12 - Parameter Problem:
Bad IP header
0 Con trỏ chỉ ra lỗi
1 Thiếu lựa chọn cần thiết

2 Tình trạng chiều dài
13 - Timestamp 0 Dấu thời gian
14 - Timestamp Reply 0 Trả lời dấu thời gian
15 - Information Request 0 Yêu cầu thông tin
16 - Information Reply 0 Phản hồi thông tin
17 - Address Mask Request 0 Yêu cầu địa chỉ mặt nạ
18 - Address Mask Reply 0 Trả lời địa chỉ mặt nạ
19 Dành riêng cho bảo mật
20 tới 29 Dành cho thử nghiệm độ bền
30 - Traceroute 0 Yêu cầu thông tin
31 Chuyển đổi Datagram bị lỗi
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
15 Bộ môn Mạng và Truyền Thông
32 Chuyển host di động
33 Where-Are-You (ban đầu cho IPv6)
34 Here-I-Am (ban đầu cho IPv6)
35 Yêu cầu sự đăng kí di động
36 Trả lời sự đăng kí di động
37 Yêu cầu tên miền
38 Trả lời tên miền
39
Thuật toán SKIP Discovery Protocol,
Simple Key – Quản lý giao thức Internet
40 Photuris, bảo mật thất bại
41
Các giao thức ICMP cho thử nghiệm di
động như Seamoby [RFC4065]
42 tới 255 Dành riêng
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 16

CHƯƠNG II: THIẾT KẾ VÀ XÂY DỰNG
CHƯƠNG TRÌNH
I. Phân tích yêu cầu
Ứng dụng phải đảm bảo thực hiện được các yêu cầu sau:
• Gửi gói tin ICMP đến tất cả các máy đến dải địa chỉ trong mạng LAN.
• Bắt các gói tin IP được gửi về và tách ra gói tin ICMP từ gói tin IP để xử
lý.
• Có thể quét theo các lớp địa chỉ Private
II. Phân tích các chức năng
1. Phương thức hoạt động của ứng dụng:
Ứng dụng hoạt động bằng cách sẽ lần lượt gửi từng gói tin ICMP tới tất cả các
máy trong mạng LAN cần quét. Dãy địa chỉ IP để gửi các gói tin ICMP sẽ do
người dùng nhập vào hay sẽ chọn lựa việc gửi theo lớp (lớp A, lớp B, lớp C ).
Trong khi gửi gói tin thì ứng dụng sẽ bắt gói tin phản hồi từ một địa chỉ IP nào đó
để tiến hành xử lý. Và dựa vào thông tin phản hồi đó mà biết được địa chỉ IP đó có
tồn tại trong mạng hay không.
Để gửi được gói tin tới tất cả các địa chi thì ta dùng 4 vòng lặp for lồng nhau
tương ứng với 4 octet của địa chỉ IPv4.
for (byte i = ipf1; i <= ipt1; i++)
for (byte j = ipf2; j <= ipt2; j++)
for (byte t = ipf3; t <= ipt3; t++)
for (byte z = ipf4; z <= ipt4; z++)
Sau khi phân tích và xác định được địa chỉ IP nào tồn tại trong mạng thì ta sẽ
tiến hành hiển thị ra cho người dùng. Thông tin hiển thị bao gồm số thứ tự của
máy trong mạng, tên máy và địa chỉ IP của máy đó.
2. Xây dựng chức năng:
Từ việc phân tích hoạt động của ứng dụng như trên ta tiến hành xây dựng chức
năng cho ứng dụng. Ứng dụng sẽ bao gồm các chức năng cơ bản sau:
• Chức năng gửi gói tin ICMP.
• Chức năng nhận và xử lý gói tin

• Chức năng quét địa chỉ IP dựa trên 2 chức năng cơ bản trên.
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
17 Bộ môn Mạng và Truyền Thông
III. Xây dựng các chức năng
a. Xây dựng chức năng gửi gói tin:
Để gửi một gói tin trong Visual C# thì ta phải sử dụng một Raw Socket. Muốn
tạo Raw Socket khi tạo ra Socket ta sử dụng SocketType.Raw, giao thức ICMP.
Tạo Raw Socket như sau:
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Raw, ProtocolType.Icmp);
Gửi gói dữ liệu Raw:
ICMP là giao thức không hướng kết nối.
Sử dụng phương thức SendTo() của lớp Socket để gửi.
Cổng trong giao thức ICMP không quan trọng.
IPEndPoint iep = new(IPEndPoint (IPAddress.Parse
(“192.168.1.2”), 0);
sock.SendTo(packet, iep);
b. Xây dựng chức năng nhận gói tin và xử lý:
Để nhận gói tin từ các máy khác gửi vể ta dùng phương thức ReceiveFrom của
lớp Socket. Dữ liệu nhận về là một gói tin IP, vì vậy ta phải tách ra để lấy gói tin
ICMP. Raw Socket không tự động định dạng ICMP cho chúng ta.
Ta định nghĩa lớp ICMP như sau:
class ICMP
{
public byte Type;
public byte Code;
public UInt16 Checksum;
public int Messagesize;
public byte[] Message = new byte[1024];
public ICMP()

{
}
}
Ta tạo ra một gói tin ICMP với Type = 8, Code = 0 để tiến hành gửi.
ICMP packet = new ICMP();
packet.Type = 0x08;
packet.Code = 0x00;
packet.Checksum = 0;
Để lấy lại gói tin ICMP từ gói IP nhận được ta có phương thức:
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 18
public ICMP(byte[] data, int size)
{
Type = data[20];
Code = data[21];
Checksum = BitConverter.ToUInt16(data, 22);
Messagesize = size - 24;
Buffer.BlockCopy(data, 24, Message, 0, Messagesize);
}
Vì gói tin ICMP bắt đầu từ byte thứ 20 trong gói tin IP nên ta sẽ lấy dữ liệu bắt
đầu từ vị trí byte thứ 20.
•Byte thứ 20 chứa thông tin về Type
•Byte thứ 21 chứa thông tin về Code
•Byte thứ 22 và 23 chứa thông tin về Checksum
•Dữ liệu bắt đầu từ byte thứ 24
Sau khi nhận gói tin ta tiến hành phân tích gói tin ICMP theo các thông điệp
điểu khiển:
•Type
•Code
•Indentifier

•Sequence
Tùy theo các thông điệp đó mà ta biết được gói tin có được phàn hồi lại hay
không.
c. Xây dựng chức năng quét địa chỉ IP:
Chức năng quét địa chỉ IP là mở rộng của việc gửi, nhận và phân tích gói tin
nhận được từ nhiều máy trong mạng LAN. Ở đây ta sẽ quét một dãy các địa chỉ IP.
Để thực thiện công việc này ta tiến hành một vòng lặp trên 4 octet của địa chỉ IP để
lần lượt gửi các gói tin ICMP đến từng máy và tiến hành phân tích nhận được
tương ứng của mỗi máy.
Nếu có sự phản hồi của máy nào thì ta biết máy đó đang tồn tại trong mạng và
hiển thị cho người sử dụng biết.
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
19 Bộ môn Mạng và Truyền Thông
CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT
QUẢ
I. Môi trường triển khai
1. Hệ thống
• Bộ xử lý Intel Pentium III hoặc các bộ xử lý mạnh hơn
• 128 MB Ram hoặc cao hơn
• Màn hình có độ phân giải (800 x 600) hoặc cao hơn
• Bàn phím, chuột
• Có kết nối mạng (hoặc Internet, hoặc LAN)
2. Phần mềm
• Hệ điều hành Windows 2000/XP/7
• Visual Studio 2010 (Visual C#)
II. Kết quả các chức năng của chương trình:
1. Giao diện chính của chương trình:
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 20
Hình 3.1 Chương trình trước khi quét

2. Chức năng quét địa chỉ của chương trình:
Hình 3.2 Quét dãy địa chỉ mà người dùng nhập vào
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
21 Bộ môn Mạng và Truyền Thông
Hình 3.3 Chức năng quét theo lớp
PHỤ LỤC
Code chương trình:
1. Lớp ICMP.cs: Xử lý gói tin ICMP
using System;
using System.Collections.Generic;
using System.Text;
namespace LTM_Scan_IP
{
class ICMP
{
public byte Type;
public byte Code;
public UInt16 Checksum;
public int Messagesize;
public byte[] Message = new byte[1024];
public ICMP()
{
}
public ICMP(byte[] data, int size)
{
Type = data[20];
Code = data[21];
Checksum = BitConverter.ToUInt16(data, 22);
Messagesize = size - 24;
Buffer.BlockCopy(data, 24, Message, 0, Messagesize);

}
public byte[] getByte()
{
byte[] data = new byte[Messagesize + 9];
Buffer.BlockCopy(BitConverter.GetBytes(Type), 0, data, 0, 1);
Buffer.BlockCopy(BitConverter.GetBytes(Code), 0, data, 1, 1);
Buffer.BlockCopy(BitConverter.GetBytes(Checksum), 0, data, 2,
2);
Buffer.BlockCopy(Message, 0, data, 4, Messagesize);
return data;
}
public UInt16 getChecksum()
{
UInt32 chcksm = 0;
byte[] data = getByte();
int packetsize = Messagesize + 8;
int index = 0;
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 22
while (index < packetsize)
{
chcksm += Convert.ToUInt32(BitConverter.ToUInt16(data,
index));
index += 2;
}
chcksm = (chcksm >> 16) + (chcksm & 0xffff);
chcksm += (chcksm >> 16);
return (UInt16)(~chcksm);
}
}

}
2. Lớp Kiemtra.cs: Kiểm tra thông tin trả về của gói tin ICMP.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace LTM_Scan_IP
{
class Kiemtra
{
public static bool Check(string st)
{
byte[] data = new byte[1024];
int recv;
Socket host = new Socket(AddressFamily.InterNetwork,
SocketType.Raw, ProtocolType.Icmp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(st), 0);
EndPoint ep = (EndPoint)iep;
ICMP packet = new ICMP();
packet.Type = 0x08;
packet.Code = 0x00;
packet.Checksum = 0;
Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0,
packet.Message, 0, 2);
Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0,
packet.Message, 2, 2);
data = Encoding.ASCII.GetBytes("test packet");
Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
packet.Messagesize = data.Length + 4;
int packetsize = packet.Messagesize + 4;

UInt16 chcksum = packet.getChecksum();
packet.Checksum = chcksum;
host.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, 100);
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
23 Bộ môn Mạng và Truyền Thông
host.SendTo(packet.getByte(), packetsize, SocketFlags.None,
iep);
try
{
data = new byte[1024];
recv = host.ReceiveFrom(data, ref ep);
ICMP response = new ICMP(data, recv);
int Indentifier = BitConverter.ToInt16(response.Message, 0);
int Sequence = BitConverter.ToUInt16(response.Message, 2);
System.Console.WriteLine("response from: {0}",
ep.ToString());
System.Console.WriteLine("Type {0}", response.Type);
System.Console.WriteLine("Code: {0}", response.Code);
System.Console.WriteLine("Indentifier: {0}", Indentifier);
System.Console.WriteLine("Sequence: {0}", Sequence);
string stringData =
Encoding.ASCII.GetString(response.Message, 4, response.Messagesize -
4);
System.Console.WriteLine("data: {0}", stringData);
host.Close();
if (response.Type == 0 && response.Code == 0 &&
Indentifier == 1 && Sequence == 1)
return true;
else return false;

}
catch (SocketException)
{
System.Console.WriteLine("No response from remote host");
host.Close();
return false;
}
}
}
}
3. Form1.cs: Xử lý sự kiện trên Winform.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B
Ứng dụng giao thức ICMP để xây dựng chương trình Scan IP 24
using System.Threading;
namespace LTM_Scan_IP
{
public partial class frMain : Form
{
int stt;
byte ipf1, ipf2, ipf3, ipf4, ipt1, ipt2, ipt3, ipt4;
public frMain()
{

InitializeComponent();
stt = 1;
}
delegate void DlgThreadCode();
public void ThreadCode()
{
if (this.prgressBar.InvokeRequired)
{
this.Invoke(new DlgThreadCode(ThreadCode));
}
else
{
for (byte i = ipf1; i <= ipt1; i++)
for (byte j = ipf2; j <= ipt2; j++)
for (byte t = ipf3; t <= ipt3; t++)
for (byte z = ipf4; z <= ipt4; z++)
{
int max = ((ipt1 - ipf1) + (ipt2 - ipf2) + (ipt3 - ipf3)
+ (ipt4 - ipf4));
prgressBar.Minimum = 0;
prgressBar.Maximum = max;
prgressBar.Step = 1;
prgressBar.PerformStep();
string strip = i.ToString() + "." + j.ToString() + "."
+ t.ToString() + "." + z.ToString();
if (Kiemtra.Check(strip))
{
IPHostEntry ipHost = Dns.Resolve(strip);
string hostName = ipHost.HostName;
Add(stt.ToString().Trim(), hostName, strip);

lvKetQua.Refresh();
stt++;
}
}
prgressBar.Value = 0;
lbStatus.Text = "ĐÃ QUÉT XONG";
}
Võ Duy Dũng – Lớp 07T4 – Nhóm 09B

×