Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
159,5 KB
Nội dung
Raw sockets - Socket thô Có thể … Chúng ta muốn sử dụng chức giao thức ICMP, IGMP Chúng ta muốn viết chương trình cho định tuyến Nhưng xử lý gói tin ICMPv4, IGMPv4 ICMPv6 với TCP/UDP sockets Nhưng xử lý gói tin OSPF nào? Chúng ta muốn công vào máy tính với gói tin giả mạo Chúng ta tạo gói tin nào? Câu trả lời “Sử dụng socket thô” Chúng ta làm với socket thô? Cho phép tiến trình nhận gửi gói tin ICMPv4, IGMPv4, ICMPv6 E.g chương trình ping, traceroute Cho phép tiến trình nhận gửi gói tin IPv4 không xử lý hệ điều hành Hầu hết hệ điều hành xử lý gói tin chứa trường giao thức (ICMP), (IGMP), (TCP), and 17 (UDP) Giao thức định tuyến OSPF có trường giao thức 89 Cho phép tiến trình tự xây dựng IPv4 header sử dụng tùy biến IP_HDRINCL Hạn chế socket thô Không có chế đảm bảo tính tin cậy truyền tin Không có số hiệu cổng Truyền tin không theo chuẩn Không có gửi gói tin ICMP tự động Không có TCP UDP thô Để tạo socket thô, cần có quyền root (hoặc administrator) Tạo socket thô Chỉ có superuser tạo socket thô #include sockfd = socket(AF_INET, SOCK_RAW, protocol); gán SOCK_RAW cho tham số thứ hai khởi tạo socket tham số protocol số định nghĩa IPPROTO_xxx E.g IPPROTO_ICMP, IPPROTO_RAW Thiết lập tùy biến IP_HDRINCL Để tự tạo IPv4 header const int on = 1; if (setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) error Gửi liệu với socket thô Gọi hàm sendto sendmsg, thiết lập địa IP đích Nếu tùy biến IP_HDRINCL không thiết lập, địa liệu gửi tương ứng với byte sau IP header Nếu tùy biến IP_HDRINCL thiết lập, địa liệu gửi tương ứng với byte IP header Hệ điều hành phân mảnh gói tin kích thước gói tin vượt MTU giao diện mạng Nhận liệu với Socket thô Thường dùng với hàm recvfrom() Các gói tin UDP TCP không gửi vào Socket thô Hầu hết gói tin ICMP/IGMP đưa vào Socket thô sau hệ điều hành xử lý xong gói tin ICMP Các gói tin IP với trường giao thức không xử lý hệ điều hành đưa vào Socket thô Nếu gói tin bị phân mảnh gói tin đưa vào Socket thô mạng tập hợp ghép mảnh đủ Nhận liệu với Socket thô (2) Điều kiện để socket thô nhận packet Nếu tham số protocol thiết lập khởi tạo socket, có gói tin có trường giao thức đưa vào socket Nếu hàm bind() gọi socket thô, có gói tin có đích đến địa IP gán đưa vào socket Nếu hàm connect() sử dụng, có gói tin gửi từ địa định đưa vào socket main function ping/main.c Lấy thông tin địa đích từ command line readloop function ping/readloop.c Tạo socket Thiết lập kích thước đệm nhận socket Gửi gói tin ICMP đầu tiến Thực lặp vô hạn để nhận gói tin ICMP tv_sub function: tính hiệu thời gian lib/tv_sub.c proc_v4 function: xử lý thông báo ICMPv4 ping/proc_v4.c Lấy trỏ trỏ đến ICMP header Kiểm tra ICMP echo reply Xuất tất thông báo ICMP nhận tùy biến verbose thiết lập sig_alrm function: SIGALRM signal handler ping/sig_alrm.c send_v4 function: builds an ICMPv4 echo request message and sends it ping/send_v4.c Tạo thông báo ICMPv4 Tính toán ICMP checksum Gửi gói tin in_cksum function: Tính toán Internet checksum libfree/in_cksum.c Chương trình traceroute Gửi gói tin UDP đến địa đích với trường TTL (hay hop limit) gán n Nhận gói tin ICMP với lỗi "time exceeded in transit" Chương trình main sig_alarm traceloop recv_v4 Gửi gói tin UDP với TTL = n liệu thời gian gửi gói tin tv_sub Nhận gói tin ICMP_TIMXCEED gói tin ICMP_UNREACH tính toán RTT Chương trình traceroute/trace.h main function traceroute/main.c traceloop function: main processing loop traceroute/traceloop.c recv_v4 function: reads and processes ICMPv4 messages traceroute/recv_v4.c sig_alrm function traceroute/sig_alrm.c Trả chuỗi ký tự tương ứng với mã ICMPv6 unreachable traceroute/icmpcode_v4.c [...]... processing loop traceroute/traceloop.c recv_v4 function: reads and processes ICMPv4 messages traceroute/recv_v4.c sig_alrm function traceroute/sig_alrm.c Trả về chuỗi ký tự tương ứng với mã ICMPv6 unreachable traceroute/icmpcode_v4.c ... sockfd = socket(AF_INET, SOCK _RAW, protocol); gán SOCK _RAW cho tham số thứ hai khởi tạo socket tham số protocol số định nghĩa IPPROTO_xxx E.g IPPROTO_ICMP, IPPROTO _RAW Thiết lập tùy biến IP_HDRINCL... muốn viết chương trình cho định tuyến Nhưng xử lý gói tin ICMPv4, IGMPv4 ICMPv6 với TCP/UDP sockets Nhưng xử lý gói tin OSPF nào? Chúng ta muốn công vào máy tính với gói tin giả mạo Chúng