Tôi đang viết một bộ lọc mạng rất đơn giản và đến nơi tôi muốn phân tích cú pháp các tiêu đề IPv6 để phù hợp với những thứ như loại ICMPv6, số cổng TCP / UDP, v.v.
Vì vậy, tôi đang đọc chuyên sâu về định dạng gói IPv6 , và tôi giống như ... à ... tôi phải đọc đi đọc lại nó nhiều lần để đảm bảo rằng tôi thực sự đọc đúng. Tôi thấy rằng bạn phải bắt đầu với tiêu đề cố định 40 byte và nhìn vào trường tiêu đề tiếp theo của nó. Sau đó, bạn phải xem trường tiêu đề tiếp theo của tiêu đề tiếp theo, v.v., giống như danh sách được liên kết, cho đến khi bạn đến cuối. Nếu có trọng tải, nó sẽ theo sau.
Vấn đề là không có trường độ dài trong tiêu đề cố định hoặc tiêu đề mở rộng. Bạn phải có một bảng các loại tiêu đề tiện ích mở rộng và kích thước của chúng để bạn có thể theo đuổi danh sách liên kết này đến cùng.
Điều này gây ấn tượng với tôi là một thiết kế kỳ lạ, thậm chí có thể là trí tuệ. Điều gì sẽ xảy ra nếu tôi gặp phải loại tiêu đề tiện ích mở rộng không được công nhận? Tôi làm gì? Tôi không biết chiều dài của nó. Tôi đoán rằng tôi phải ném gói tin ra ngoài và chặn nó, vì trong một bộ lọc ròng cho phép gói tin đi qua sẽ cho phép kẻ tấn công trốn tránh bộ lọc mạng bằng cách đưa vào một loại tiêu đề không có thật. Nhưng điều đó có nghĩa là nếu giao thức được mở rộng, mọi phần mềm phân tích cú pháp tiêu đề IPv6 từng được viết phải được cập nhật đồng thời nếu phần mở rộng mới được sử dụng.
Vậy làm cách nào để phân tích cú pháp các tiêu đề IPv6 nếu tôi không biết các tiện ích mở rộng mà chúng đang sử dụng? Làm cách nào để bỏ qua tiêu đề cho một tiện ích mở rộng không xác định, vì tôi không biết độ dài của nó?