1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python

31 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài Tập Lớn Giám Sát An Toàn Mạng Lập Trình Bắt Và Phân Tích Gói Tin Bằng Python
Tác giả Nguyễn Duy Tú Anh, Ngô Đức Bắc, Phạm Trung Đức, Nguyễn Quốc Hoàn, Nguyễn Minh Ngọc
Người hướng dẫn Nguyễn Ngọc Điệp
Trường học Học viện Công nghệ Bưu chính Viễn thông
Thể loại Bài Tập Lớn
Năm xuất bản 2017
Thành phố Hà Nội
Định dạng
Số trang 31
Dung lượng 0,94 MB

Cấu trúc

  • Chương 1 Tổng quan về lí thuyết giao thức (6)
    • 1.1 Dẫn chương (6)
    • 1.2 UDP Header (6)
    • 1.3 TCP Header (7)
    • 1.4 IP Header (12)
    • 1.5 Ethernet Header (15)
  • Chương 2 Tổng quan về kĩ thuật (16)
    • 2.1 Dẫn chương (16)
    • 2.2 Giới thiệu về Python (16)
    • 2.3 Lập trình bắt và phân tích các gói tin (17)
      • 2.3.1 Hàm phân tích gói tin giao thức UDP (18)
      • 2.3.2 Hàm phân tích gói tin giao thức TCP (18)
      • 2.3.3 Hàm phân tích gói tin giao thức IP (18)
      • 2.3.4 Hàm phân tích gói tin giao thức Ethernet (19)
  • Chương 3 Lập trình việc phân tích và bắt gói tin bằng Python (20)
    • 3.1 Dẫn chương (20)
    • 3.2 Chương trình đầy đủ (20)
    • 3.3 Ứng dụng thực tế (26)

Nội dung

Tổng quan về lí thuyết giao thức

Dẫn chương

Trong chương đầu tiên, chúng ta sẽ khám phá lý thuyết về các header của gói tin trong các giao thức UDP, TCP, IP và Ethernet Những kiến thức này được trình bày một cách súc tích, nhằm tạo nền tảng vững chắc cho chương hai, nơi chúng ta sẽ phân tích cách lập trình để bắt nội dung gói tin.

UDP Header

Giao thức User Datagram Protocol (UDP) cung cấp gói tin datagram cho giao tiếp giữa các máy tính trong môi trường mạng kết nối UDP hoạt động dựa trên giao thức Internet Protocol (IP) như là nền tảng chính cho việc truyền tải dữ liệu.

Giao thức này cho phép các chương trình ứng dụng gửi tin nhắn đến nhau với cơ chế tối thiểu và có hướng giao dịch Mặc dù nó không đảm bảo việc truyền tin và bảo vệ bản sao, nhưng các ứng dụng cần phân phối luồng dữ liệu đáng tin cậy nên sử dụng Giao thức Điều khiển TCP.

Hình 1.1: Các thành phần của header trong gói tin giao thức UDP

Dựa trên hình minh họa 1.1, header của gói tin trong giao thức UDP được phân tích như sau:

STT Tên thành phần Độ dài thành phần Đặc điểm, chức năng

Cổng của quá trình gửi là một trường tùy chọn, cho biết nơi mà phản hồi nên được gửi đến nếu không có thông tin nào khác Nếu trường này không được sử dụng, giá trị mặc định sẽ là không.

Port 16 bits Có ý nghĩa trong ngữ cảnh của một địa chỉ đích đến của Internet cụ thể

Chiều dài của gói tin người dùng được tính theo octet, bao gồm cả tiêu đề và dữ liệu Giá trị tối thiểu của chiều dài này là tám octet.

Checksum là một thành phần bổ sung trong tiêu đề giả, được tính toán từ thông tin của tiêu đề IP, phần đầu UDP và dữ liệu Nó có thể được đệm với các octet không cần thiết ở cuối để đảm bảo tổng số octet đạt được bội số của hai.

Bảng 1.1: Phân tích các thành phần của header trong giao thức UDP

TCP Header

TCP là giao thức tin cậy, kết nối đầu cuối, được thiết kế để hoạt động trong một hệ thống phân cấp các giao thức, hỗ trợ các ứng dụng đa mạng.

TCP đảm bảo giao tiếp đáng tin cậy giữa các quy trình trên các máy chủ khác nhau trong các mạng máy tính riêng biệt nhưng có khả năng kết nối với nhau Giao thức TCP hoạt động với rất ít giả định về độ tin cậy của các giao thức truyền thông nằm dưới lớp TCP.

TCP giả định rằng nó có thể nhận được dịch vụ datagram đơn giản và không đáng tin cậy từ các giao thức tầng thấp hơn Nguyên tắc cơ bản của TCP là phải đảm bảo khả năng truyền tải dữ liệu một cách hiệu quả và đáng tin cậy.

8 năng hoạt động trên nhiều hệ thống truyền thông khác nhau, từ các kết nối cứng đến các mạng chuyển mạch gói hoặc mạng chuyển mạch

Các phân đoạn TCP được gửi dưới dạng các gói tin internet Tiêu đề

Giao thức Internet bao gồm nhiều trường thông tin, như địa chỉ nguồn và đích Tiêu đề TCP, theo sau tiêu đề Internet, cung cấp thông tin quan trọng cho giao thức TCP, cho phép sự tương tác với các giao thức lưu trữ khác.

Hình 1.2: Các thành phần header trong gói tin giao thức TCP

Dựa trên hình minh họa, header của gói tin trong giao thức TCP được phân tích như sau:

Bảng 1.2: Phân tích các thành phần của header trong giao thức TCP

STT Tên thành phần Độ dài thành phần Đặc điểm chức năng

Số thứ tự của octet dữ liệu đầu tiên trong phân đoạn sẽ được xác định, trừ khi có SYN Nếu có SYN, số thứ tự sẽ là số thứ tự ban đầu (ISN), và octet dữ liệu đầu tiên sẽ là ISN cộng thêm 1.

Nếu bit điều khiển ACK được thiết lập, trường này chứa giá trị của số thứ tự tiếp theo mà người gửi của phân đoạn này mong đợi nhận

Một khi kết nối được thiết lập, điều này luôn được gửi

Tiêu đề TCP có độ dài 32 bit, trong đó chứa thông tin quan trọng về vị trí bắt đầu của dữ liệu Ngay cả khi bao gồm các tùy chọn, tiêu đề TCP vẫn giữ nguyên kích thước này, đảm bảo tính toàn vẹn trong quá trình truyền tải dữ liệu.

6 Reserved 6 bits Mục đích của nó là để sử dụng cho tương lai, giá trị phải là 0

 URG: Trường con trỏ khẩn cấp

 ACK: Xác nhận các trường đáng kể

 RST: Đặt lại kết nối

 SYN: Đồng bộ hóa số thứ tự

 FIN: Không có thêm dữ liệu từ người gửi

Số lượng octet dữ liệu bắt đầu với số được chỉ ra trong trường xác nhận mà người gửi của phân đoạn này sẵn sàng chấp nhận

Trường tổng kiểm tra là một phần bổ sung 16 bit cho tổng số tất cả các từ 16 bit trong tiêu đề và văn bản Nếu một phân đoạn có số lượng từ lẻ, octet cuối cùng sẽ được thêm vào bên phải với số không để tạo thành một từ hoàn chỉnh.

16 bit cho các mục đích kiểm tra

Phần đệm không được truyền đi như một phần của đoạn Trong khi tính tổng kiểm tra, trường kiểm tra sẽ được thay thế bằng các số không

Chiều dài TCP được xác định bằng tổng chiều dài tiêu đề TCP và độ dài dữ liệu tính bằng octet Lưu ý rằng đây không phải là số lượng truyền rõ ràng mà được tính toán, và chiều dài này không bao gồm 12 octet của tiêu đề giả.

Trường con trỏ khẩn cấp truyền tải giá trị hiện tại như một số dương bù đắp từ số thứ tự trong đoạn dữ liệu Nó chỉ ra số thứ tự của octet tiếp theo sau dữ liệu khẩn cấp và chỉ có thể được hiểu trong các phân đoạn với bit điều khiển URG được thiết lập.

Phần đệm tiêu đề TCP được thiết kế để đảm bảo rằng tiêu đề TCP kết thúc và dữ liệu bắt đầu trên ranh giới 32 bit, với phần đệm này bao gồm các giá trị bằng 0.

IP Header

Hình 1.3: Minh họa các thành phần của header giao thức IP

Dựa trên hình minh họa, header của gói tin trong giao thức IP được phân tích như sau:

Bảng 1.3: Phân tích các thành phần của header trong giao thức IP

STT Tên thành phần Độ dài thành phần Đặc điểm

Trường Phiên bản chỉ định định dạng của tiêu đề internet Ví dụ như hiển thị 6 thì giao thức của nó là TCP, hiển thị 17 thì là UDP

Chiều dài tiêu đề Internet là chiều dài của tiêu đề internet bằng các từ 32 bit, và do đó chỉ ra sự bắt đầu của dữ liệu

Lưu ý rằng giá trị tối thiểu cho một tiêu đề chính xác là 5

Dịch vụ này cung cấp chỉ dẫn về các tham số trừu tượng liên quan đến chất lượng dịch vụ mong muốn, nhằm hỗ trợ trong việc lựa chọn các tham số dịch vụ thực tế khi truyền tải gói tin qua mạng Một số mạng ưu tiên xử lý lưu lượng truy cập quan trọng hơn, chỉ chấp nhận lưu lượng ở mức độ ưu tiên nhất định trong thời gian tải cao Sự lựa chọn này đòi hỏi sự cân bằng giữa độ trễ thấp, độ tin cậy cao và thông lượng lớn.

Tổng chiều dài là độ dài của datagram, được đo bằng octet, bao gồm tiêu đề internet và dữ liệu

Trường này cho phép độ dài gói tin lên tới 65.535 octet, tuy nhiên, độ dài datagram như vậy không thực tế cho hầu hết các máy chủ và mạng.

Một giá trị nhận dạng được chỉ định bởi người gửi để giúp lắp ráp các mảnh của một gói tin

Các cờ điều khiển khác nhau

 Bit 0: dự trữ, phải bằng không

 Bit 1: (DF) 0 = Có thể phân mảnh, 1 = Không phân mảnh

 Bit 2: (MF) 0 = Đoạn cuối, 1 Các phân đoạn khác

Trong datagram này, đoạn được xác định thuộc về datagram Phần bù đắp được tính bằng đơn vị 8 octet (64 bit), trong đó đoạn đầu tiên đã được bù đắp bằng không.

Trường TTL (Time to Live) xác định thời gian tối đa mà một datagram có thể tồn tại trong hệ thống internet Nếu giá trị TTL là 0, gói tin sẽ bị hủy Trong quá trình xử lý phần đầu internet, trường này sẽ được điều chỉnh Thời gian được tính bằng giây, nhưng mỗi mô-đun xử lý gói tin phải giảm TTL ít nhất một đơn vị, ngay cả khi gói tin được xử lý trong thời gian ngắn hơn một giây Do đó, TTL được coi là giới hạn trên cho thời gian tồn tại của datagram, nhằm mục đích loại bỏ các gói tin không gửi đi được và giới hạn thời gian tối đa cho datagram.

Trường này cho biết giao thức mức tiếp theo được sử dụng trong phần dữ liệu của gói tin internet

Checksum chỉ được áp dụng cho tiêu đề, và do một số trường tiêu đề có thể thay đổi, như "Thời gian sống" (Time to live), tính năng này sẽ được tính toán lại và xác minh tại mỗi giai đoạn mà tiêu đề internet được xử lý.

Address 32 bits Địa chỉ nguồn

Address 32 bits Địa chỉ đích

Phần đệm Internet header được sử dụng để đảm bảo đầu cuối của internet header kết thúc trên ranh giới

32 bit Phần đệm có giá trị 0.

Ethernet Header

Một khung Ethernet được nối trước bởi một dấu phân cách đầu và khung bắt đầu frame (SFD), là một phần của gói Ethernet ở lớp vật lý Mỗi khung

Ethernet bắt đầu với một tiêu đề chứa địa chỉ MAC đích và nguồn Phần giữa của khung bao gồm dữ liệu tải trọng với các tiêu đề cho các giao thức khác, chẳng hạn như Giao thức Internet Cuối cùng, khung kết thúc bằng một chuỗi kiểm tra khung (FCS), là kiểm tra dự phòng chu kỳ 32 bit dùng để phát hiện lỗi trong quá trình truyền dữ liệu.

Hình 1.4: Minh họa thành phần header giao thức IP

Tổng quan về kĩ thuật

Dẫn chương

Trong chương hai của bài tiểu luận, chúng ta sẽ khám phá cách sử dụng ngôn ngữ lập trình Python để bắt và phân tích các gói tin, từ đó hiểu rõ hơn về quy trình và ứng dụng của Python trong lĩnh vực này.

Giới thiệu về Python

Phiên bản Python: Python 2.7.12+ [GCC 6.2.0 20160822] on linux2

Bảng 2.1: Các thư viện sử dụng trong chương trình Python

STT Tên thư viện Chức năng

Mô-đun này cho phép chuyển đổi giữa các giá trị Python và cấu trúc C thông qua các chuỗi Python Nó hữu ích trong việc xử lý dữ liệu nhị phân từ các tệp tin hoặc kết nối mạng Mô-đun sử dụng định dạng chuỗi để mô tả cách bố trí của cấu trúc C và thực hiện việc chuyển đổi giữa các giá trị Python.

Mô đun này cho phép người dùng truy cập vào giao diện ổ cắm BSD, và nó được hỗ trợ trên tất cả các hệ thống Unix hiện đại, bao gồm cả Windows, Mac OS X, BeOS, OS/2 và có thể trên nhiều nền tảng khác.

Mô-đun binascii chứa một số phương pháp để chuyển đổi giữa các tập tin nhị phân và mã hóa

4 OS, SYS Mô-đun này cung cấp cách sử dụng chức năng hệ điều hành phụ thuộc

Mô-đun này dùng để dừng màn hình chương trình trong một thời gian nhất định (Để tiện việc theo dõi các gói tin)

Lập trình bắt và phân tích các gói tin

Hình 2.1: Số thứ tự chỉ định hai thức UDP và TCP

Bảng 2.2: Quy đổi các giá trị trong thư viện Struct của ngôn ngữ Python

Format C Type Python type Standard size x pad byte no value c char string of length 1 1 b signed char integer 1

H unsigned short integer 2 i int integer 4

I unsigned int integer 4 l long integer 4

L unsigned long integer 4 q long long integer 8

Q unsigned long long integer 8 f float float 4 d double float 8 s char[] string p char[] string

Lưu ý: Header field luôn sử dụng hàm giá trị unsign có giá trị dương 2.3.1 Hàm phân tích gói tin giao thức UDP:

Hình 2.2: Hàm phân tích gói tin UDP 2.3.2 Hàm phân tích gói tin giao thức TCP:

Hình 2.3: Hàm phân tích giao thức TCP

2.3.3 Hàm phân tích gói tin giao thức IP:

Hình 2.4: Hàm phân tích giao thức IP

2.3.4 Hàm phân tích gói tin giao thức Ethernet:

Hình 2.5: Hàm phân tích giao thức Ethernet

Lập trình việc phân tích và bắt gói tin bằng Python

Dẫn chương

Trong chương số ba của bài tiểu luận, chúng ta ứng dụng thực tế script Python PacketSniffer.py vào thực tế.

Chương trình đầy đủ

The article discusses the analysis of UDP headers in Python, utilizing the `struct`, `socket`, and `binascii` libraries It includes a function, `analyze_udp_header`, which unpacks the UDP header data into source port, destination port, length, and checksum The function then prints out the details of the UDP header, including the source and destination ports, length, and checksum, before returning the remaining data for further processing.

The function `analyze_tcp_header(data)` unpacks the TCP header from the given data using the `struct` module It extracts key components such as the source port, destination port, sequence number, acknowledgment number, and various flags, including urgent, acknowledgment, push, reset, synchronization, and finish flags Additionally, it retrieves the window size, checksum, and urgent pointer After processing, the function prints a formatted representation of the TCP header, displaying the source and destination ports, sequence and acknowledgment numbers, along with the flags.

The provided code snippet displays crucial TCP header information, including values for URG, ACK, PSH, RST, SYN, FIN, Window, and Checksum It also includes a function that analyzes the IP header by unpacking the first 20 bytes of data The analysis extracts the version, header length, type of service, total length, identification, flags, fragment offset, time to live (TTL), protocol, checksum, source address, and destination address This function is essential for understanding the structure and components of IP and TCP headers in network communications.

The provided code snippet prints the details of an IP header, including fields such as version, IHL, TOS, total length, ID, flags, fragment offset, TTL, next protocol, checksum, source IP, and destination IP It determines the next protocol based on the IP protocol number, identifying it as TCP for 6, UDP for 17, or "Other" for any other value Additionally, the function `analyze_ether_header` unpacks the Ethernet header and extracts the destination MAC address, preparing the data for further analysis.

The Ethernet header analysis begins by extracting the source MAC address and the next protocol from the received data The source MAC address is converted to a hexadecimal format, and the destination MAC address is displayed in a formatted manner The protocol is checked, and if it indicates an IP protocol (0x08), the function proceeds to strip the Ethernet header and returns the remaining data along with a boolean flag The main function initializes a raw socket for packet sniffing, receives data, and clears the console It then analyzes the Ethernet header and, if the data contains an IP packet, continues to analyze the IP header, eventually checking for TCP protocol to analyze the TCP header further.

25 elif next_proto == "UDP": data = analyze_udp_header(data) else: return while True: main()

Ứng dụng thực tế

Thử chạy script PacketSniffer.py trên máy ảo Linux, ta được kết quả như sau:

Hình 3.1: Chương trình PacketSniffer.py bắt gói tin UDP

27 Hình 3.2: Chương trình PacketSniffer.py bắt gói tin TCP

28 Hình 3.3: Chương trình PacketSniffer.py bắt gói tin UDP

Hình 3.4: Chương trình PacketSniffer.py bắt gói tin TCP

29 Hình 3.5: Chương trình PacketSniffer.py bắt gói tin TCP

30 Hình 3.6: Chương trình PacketSniffer.py bắt gói tin TCP.

Ngày đăng: 13/10/2022, 04:49

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Các thành phần của header trong gói tin giao thức UDP - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 1.1 Các thành phần của header trong gói tin giao thức UDP (Trang 6)
Bảng 1.1: Phân tích các thành phần của header trong giao thức UDP - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Bảng 1.1 Phân tích các thành phần của header trong giao thức UDP (Trang 7)
Hình 1.2: Các thành phần header trong gói tin giao thức TCP - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 1.2 Các thành phần header trong gói tin giao thức TCP (Trang 8)
Bảng 1.2: Phân tích các thành phần của header trong giao thức TCP - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Bảng 1.2 Phân tích các thành phần của header trong giao thức TCP (Trang 9)
Dựa trên hình minh họa, header của gói tin trong giao thức IP được phân tích như sau: - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
a trên hình minh họa, header của gói tin trong giao thức IP được phân tích như sau: (Trang 12)
Hình 1.3: Minh họa các thành phần của header giao thức IP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 1.3 Minh họa các thành phần của header giao thức IP (Trang 12)
13 Options Tùy biến - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
13 Options Tùy biến (Trang 15)
Hình 1.4: Minh họa thành phần header giao thức IP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 1.4 Minh họa thành phần header giao thức IP (Trang 15)
Mô-đun này dùng để dừng màn hình chương trình trong một thời gian nhất định (Để tiện việc theo dõi - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
un này dùng để dừng màn hình chương trình trong một thời gian nhất định (Để tiện việc theo dõi (Trang 16)
Bảng 2.2: Quy đổi các giá trị trong thư viện Struct của ngôn ngữ Python - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Bảng 2.2 Quy đổi các giá trị trong thư viện Struct của ngôn ngữ Python (Trang 17)
Hình 2.1: Số thứ tự chỉ định hai thức UDP và TCP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 2.1 Số thứ tự chỉ định hai thức UDP và TCP (Trang 17)
Hình 3.1: Chương trình PacketSniffer.py bắt gói tin UDP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 3.1 Chương trình PacketSniffer.py bắt gói tin UDP (Trang 26)
Hình 3.2: Chương trình PacketSniffer.py bắt gói tin TCP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 3.2 Chương trình PacketSniffer.py bắt gói tin TCP (Trang 27)
Hình 3.3: Chương trình PacketSniffer.py bắt gói tin UDP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 3.3 Chương trình PacketSniffer.py bắt gói tin UDP (Trang 28)
Hình 3.5: Chương trình PacketSniffer.py bắt gói tin TCP. - Bài tập lớn giám sát an toàn mạng lập trình bắt và phân tích gói tin bằng python
Hình 3.5 Chương trình PacketSniffer.py bắt gói tin TCP (Trang 29)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w