(TIỂU LUẬ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

33 7 0
(TIỂU LUẬ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

Đ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

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG - Bài tập lớn Giám sát an tồn mạng Lập trình bắt phân tích gói tin Python Hà nội, ngày tháng năm 2017 Mục lục DANH MỤC CÁC CHỮ VIẾT TẮT .3 DANH SÁCH CÁC BẢNG .4 DANH SÁCH HÌNH VẼ Chương – Tổng quan lí thuyết giao thức .6 1.1 Dẫn chương: .6 1.2 UDP Header 1.3 TCP Header 1.4 IP Header 12 1.5 Ethernet Header 15 Chương – Tổng quan kĩ thuật 16 2.1 Dẫn chương: .16 2.2 Giới thiệu Python 16 2.3 Lập trình bắt phân tích 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 – Lập trình việc phân tích bắt gói tin 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 Danh mục tài liệu tham khảo .31 DANH MỤC CÁC CHỮ VIẾT TẮT Viết tắt UDP TCP IP URG ACK PSH RST SYN DANH SÁCH CÁC BẢNG Bảng 1.1: Phân tích thành phần header giao thức UDP Bảng 1.2: Phân tích thành phần header giao thức TCP Bảng 1.3: Phân tích thành phần header giao thức IP Bảng 2.1: Các thư viện sử dụng chương trình Python Bảng 2.2: Quy đổi giá trị thư viện Struct ngôn ngữ Python DANH SÁCH HÌNH VẼ Hình 1.1: Các thành phần header gói tin giao thức UDP Hình 1.2: Các thành phần header gói tin giao thức TCP Hình 1.3: Minh họa thành phần header giao thức IP Hình 1.4: Minh họa thành phần header giao thức IP Hình 2.1: Số thứ tự định hai thức UDP TCP Hình 2.2: Hàm phân tích giao thức UDP Hình 2.3: Hàm phân tích giao thức TCP Hình 2.4: Hàm phân tích giao thức IP Hình 2.5: Hàm phân tích giao thức Ethernet Hình 3.1: Chương trình PacketSniffer.py bắt gói tin UDP Hình 3.2: Chương trình PacketSniffer.py bắt gói tin TCP 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 Hình 3.5: Chương trình PacketSniffer.py bắt gói tin UDP Chương – Tổng quan lí thuyết giao thức 1.1 Dẫn chương: Trong chương đầu tiên, tìm hiểu, sơ lược lí thuyết header gói tin giao thức UDP, TCP, IP Ethernet Các kiến thức súc tích, gói gọn, nhằm đặt tảng vững cho chương hai phân tích cách lập trình bắt nội dung gói tin 1.2 UDP Header Giao thức User Datagram Protocol (UDP) giao thức cung cấp gói tin datagram cho việc giao tiếp máy tính chuyển mạch mơi trường tập hợp mạng máy tính kết nối Giao thức giả định Internet Protocol (IP) sử dụng làm giao thức Giao thức cung cấp thủ tục cho chương trình ứng dụng để gửi tin nhắn đến chương trình khác với chế giao thức tối thiểu Giao thức có hướng giao dịch, truyền tin bảo vệ khơng đảm bảo Các ứng dụng địi hỏi yêu cầu phân phối luồng liệu đáng tin cậy theo yêu cầu nên sử dụng TCP Control Protocol Hình 1.1: Các thành phần header gói tin giao thức UDP Dựa hình minh họa 1.1, header gói tin giao thức UDP phân tích sau: STT Bảng 1.1: Phân tích thành phần header giao thức UDP 1.3 TCP Header TCP giao thức tin cậy định hướng kết nối, đầu cuối thiết kế để phù hợp với hệ thống phân cấp giao thức có hỗ trợ ứng dụng đa mạng TCP cung cấp giao tiếp trình đáng tin cậy cặp quy trình máy chủ lưu trữ gắn với mạng truyền thơng máy tính riêng biệt kết nối với Rất giả định thực độ tin cậy giao thức truyền thông lớp TCP TCP giả sử có dịch vụ datagram đơn giản, không đáng tin cậy từ giao thức cấp thấp Về nguyên tắc, TCP nên có khả hoạt động nhiều hệ thống truyền thông khác nhau, từ kết nối cứng đến mạng chuyển mạch gói mạng chuyển mạch Các phân đoạn TCP gửi dạng gói tin internet Tiêu đề Giao thức Internet chứa nhiều trường thông tin, bao gồm địa nguồn đích Một tiêu đề TCP theo tiêu đề internet, cung cấp thông tin cụ thể cho giao thức TCP Bộ phận cho phép tồn giao thức mức lưu trữ khác với TCP Hình 1.2: Các thành phần header gói tin giao thức TCP Dựa hình minh họa, header gói tin giao thức TCP phân tích sau: Bảng 1.2: Phân tích thành phần header giao thức TCP STT 9 2.3 Lập trình bắt phân tích gói tin Hình 2.1: Số thứ tự định hai thức UDP TCP Bảng 2.2: Quy đổi giá trị thư viện Struct ngôn ngữ Python Format x c b B ? h H i I l L q Q f d s p P 17 Lưu ý: Header field 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: 18 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 19 Chương – Lập trình việc phân tích bắt gói tin Python 3.1 Dẫn chương: Trong chương số ba tiểu luận, ứng dụng thực tế script Python PacketSniffer.py vào thực tế 3.2 Chương trình đầy đủ: PacketSniffer.py # Lap trinh phan tich va bat goi tin tren Python import struct import socket import binascii import os, sys import time def analyze_udp_header(data): udp_hdr = struct.unpack("!4H", data[:8]) src_port = udp_hdr[0] dst_port = udp_hdr[1] length = udp_hdr[2] chk_sum = udp_hdr[3] data = data[8:] print "! _UDP HEADER !" print "|\t\tSource:\t\t%hu" % src_port print "|\t\tDest:\t\t%hu" % dst_port print "|\t\tLength:\t\t%hu" % length print "|\t\tChecksum:\t%hu" % chk_sum return data 20 def analyze_tcp_header(data): tcp_hdr = struct.unpack("!2H2I4H", data[:20]) src_port = tcp_hdr[0] dst_port = tcp_hdr[1] seq_num = tcp_hdr[2] ack_num = tcp_hdr[3] data_offset = tcp_hdr[4] >> 12 reserved = (tcp_hdr[4] >> 6) & 0x03ff flags = tcp_hdr[4] & 0x003f urg = flags & 0x0020 ack = flags & 0x0010 psh = flags & 0x0008 rst = flags & 0x0004 syn = flags & 0x0002 fin = flags & 0x0001 window = tcp_hdr[5] checksum = tcp_hdr[6] urg_ptr = tcp_hdr[7] data = data[20:] print "! _TCP HEADER !" print "|\t\tSource: \t%hu" % src_port print "|\t\tDest: \t\t%hu" % dst_port print "|\t\tSeq: \t\t%u" % seq_num print "|\t\tAck: \t\t%u" % ack_num print "|\t\tFlags: " 21 print "|\t\t\t URG:%d" % urg print "|\t\t\t ACK:%d" % ack print "|\t\t\t PSH:%d" % psh print "|\t\t\t RST:%d" % rst print "|\t\t\t SYN:%d" % syn print "|\t\t\t FIN:%d" % fin print "|\t\t Window:\t%hu" % window print "|\t\t Checksum:\t%hu" % checksum return data def analyze_ip_header(data): ip_hdr = struct.unpack("!6H4s4s", data[:20]) ver = ip_hdr[0] >> 12 ihl = (ip_hdr[0] >> 8) & 0x0f tos = ip_hdr[0] & 0x00ff tot_len = ip_hdr[1] ip_id = ip_hdr[2] flags = ip_hdr[3] >> 13 frag_offset = ip_hdr[3] & 0x1fff ip_ttl = ip_hdr[4] >> ip_proto = ip_hdr[4] & 0x00ff chk_sum = ip_hdr[5] src_addr = socket.inet_ntoa(ip_hdr[6]) #first 4s dst_addr = socket.inet_ntoa(ip_hdr[7]) #second 4s no_frag = flags >> more_frag = flags & 0x1 22 print "! _IP HEADER !" print "|\t\tVersion:\t%hu" % ver print "|\t\tIHL:\t\t%hu" % ihl print "|\t\tTOS:\t\t%hu" % tos print "|\t\tLength:\t\t%hu" % tot_len print "|\t\tID:\t\t%hu" % ip_id print "|\t\tFlags:\t\t%hu" % flags print "|\t\tOffset:\t\t%hu" % frag_offset print "|\t\tTTL:\t\t%hu" % ip_ttl print "|\t\tNext Proto:\t%hu" % ip_proto print "|\t\tChecksum:\t%hu" % chk_sum print "|\t\tSource IP:\t%s" % src_addr print "|\t\tDest IP:\t%s" % dst_addr if ip_proto == 6: next_proto = "TCP" elif ip_proto == 17: next_proto = "UDP" else: next_proto = "Other" data = data[20:] return data, next_proto def analyze_ether_header(data): ip_bool = False eth_hdr = struct.unpack("!6s6sH", data[:14]) #IPv4 = 0x0800 dest_mac = binascii.hexlify(eth_hdr[0]) #Destination Address 23 src_mac = binascii.hexlify(eth_hdr[1]) #Source Address proto = eth_hdr[2] >> #NextProtocol print "! _ETH HEADER !" print "|\tDestination MAC: \t%s:%s:%s:%s:%s:%s " % (dest_mac[0:2], dest_mac[2:4], dest_mac[4:6], dest_mac[6:8], dest_mac[8:10], dest_mac[10:12]) print "|\tSource MAC: \t\t%s:%s:%s:%s:%s:%s" % (src_mac[0:2],src_mac[2:4],src_mac[4:6], src_mac[6:8], src_mac[8:10], src_mac[10:12]) print "|\tProto:\t\t\t\t%hu" % proto if proto == 0x08: ip_bool = True data = data[14:] return data, ip_bool def main(): sniffer_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003)) recv_data = sniffer_socket.recv(2048) time.sleep(1) os.system("clear") data, ip_bool = analyze_ether_header(recv_data) if ip_bool: data, next_proto = analyze_ip_header(data) else: return if next_proto == "TCP": data = analyze_tcp_header(data) 24 elif next_proto == "UDP": data = analyze_udp_header(data) else: return while True: main() 25 3.3 Ứng dụng thực tế Thử chạy script PacketSniffer.py máy ảo Linux, ta kết sau: Hình 3.1: Chương trình PacketSniffer.py bắt gói tin UDP 26 Hình 3.2: Chương trình PacketSniffer.py bắt gói tin TCP 27 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 28 Hình 3.5: Chương trình PacketSniffer.py bắt gói tin TCP 29 Hình 3.6: Chương trình PacketSniffer.py bắt gói tin TCP 30 Danh mục tài liệu tham khảo [1] https://docs.python.org/2/library/os.html [2] https://tools.ietf.org/html/rfc793#page-15 [3] https://www.ietf.org/rfc/rfc768.txt [4] https://en.wikipedia.org/wiki/Ethernet_frame [5] https://www.cybrary.it/video/packet-analyzer-part-2/ 31 ... 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 – Lập trình việc phân tích bắt gói. .. 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: 18 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... vào việc bắt phân tích gói tin 2.2 Giới thiệu Python Phiê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 tro STT 16 2.3 Lập trình bắt phân tích gói tin Hình

Ngày đăng: 30/11/2022, 14:06

Hình ảnh liên quan

Bảng 1.1: Phân tích các thành phần của header trong giao thức UDP - (TIỂU LUẬ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

Bảng 1.1.

Phân tích các thành phần của header trong giao thức UDP Xem tại trang 7 của tài liệu.
Hình 1.2: Các thành phần header trong gói tin giao thức TCP - (TIỂU LUẬ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

Hình 1.2.

Các thành phần header trong gói tin giao thức TCP Xem tại trang 8 của tài liệu.
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: - (TIỂU LUẬ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

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: Xem tại trang 9 của tài liệu.
Hình 1.3: Minh họa các thành phần của header giao thức IP. - (TIỂU LUẬ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

Hình 1.3.

Minh họa các thành phần của header giao thức IP Xem tại trang 13 của tài liệu.
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: - (TIỂU LUẬ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

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: Xem tại trang 13 của tài liệu.
1.5 Ethernet Header - (TIỂU LUẬ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

1.5.

Ethernet Header Xem tại trang 16 của tài liệu.
Hình 1.4: Minh họa thành phần header giao thức IP. - (TIỂU LUẬ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

Hình 1.4.

Minh họa thành phần header giao thức IP Xem tại trang 16 của tài liệu.
Bảng 2.1: Các thư viện sử dụng trong chương trình Python. - (TIỂU LUẬ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

Bảng 2.1.

Các thư viện sử dụng trong chương trình Python Xem tại trang 18 của tài liệu.
Chương 2– Tổng quan về kĩ thuật - (TIỂU LUẬ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

h.

ương 2– Tổng quan về kĩ thuật Xem tại trang 18 của tài liệu.
Hình 2.1: Số thứ tự chỉ định hai thức UDP và TCP. - (TIỂU LUẬ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

Hình 2.1.

Số thứ tự chỉ định hai thức UDP và TCP Xem tại trang 19 của tài liệu.
Bảng 2.2: Quy đổi các giá trị trong thư viện Struct của ngôn ngữ Python - (TIỂU LUẬ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

Bảng 2.2.

Quy đổi các giá trị trong thư viện Struct của ngôn ngữ Python Xem tại trang 19 của tài liệu.
Hình 2.3: Hàm phân tích giao thức TCP - (TIỂU LUẬ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

Hình 2.3.

Hàm phân tích giao thức TCP Xem tại trang 20 của tài liệu.
Hình 3.1: Chương trình PacketSniffer.py bắt gói tin UDP. - (TIỂU LUẬ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

Hình 3.1.

Chương trình PacketSniffer.py bắt gói tin UDP Xem tại trang 28 của tài liệu.
Hình 3.2: Chương trình PacketSniffer.py bắt gói tin TCP. - (TIỂU LUẬ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

Hình 3.2.

Chương trình PacketSniffer.py bắt gói tin TCP Xem tại trang 29 của tài liệu.
Hình 3.3: Chương trình PacketSniffer.py bắt gói tin UDP. - (TIỂU LUẬ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

Hình 3.3.

Chương trình PacketSniffer.py bắt gói tin UDP Xem tại trang 30 của tài liệu.
Hình 3.5: Chương trình PacketSniffer.py bắt gói tin TCP. - (TIỂU LUẬ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

Hình 3.5.

Chương trình PacketSniffer.py bắt gói tin TCP Xem tại trang 31 của tài liệu.
Hình 3.6: Chương trình PacketSniffer.py bắt gói tin TCP. - (TIỂU LUẬ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

Hình 3.6.

Chương trình PacketSniffer.py bắt gói tin TCP Xem tại trang 32 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan