Saya menulis filter bersih yang sangat sederhana, dan menuju ke tempat saya ingin mengurai header IPv6 agar sesuai dengan hal-hal seperti jenis ICMPv6, nomor port TCP / UDP, dll.
Jadi saya membaca tentang format paket IPv6 secara mendalam, dan saya seperti ... yah ... Saya harus membacanya berulang kali untuk memastikan saya benar-benar membacanya dengan benar. Menurut saya, Anda harus memulai dengan header tetap 40-byte dan melihat bidang header berikutnya. Kemudian Anda harus melihat bidang header berikutnya dari header, dan seterusnya, seperti daftar tertaut, hingga Anda mencapai akhir. Jika ada muatan, itu akan mengikuti.
Masalahnya adalah tidak ada kolom panjang baik di header tetap atau header ekstensi. Anda harus memiliki tabel jenis tajuk ekstensi dan ukurannya sehingga Anda dapat mengejar daftar tertaut ini sampai akhir.
Ini menurut saya sebagai desain yang aneh, bahkan mungkin berotak kelinci. Bagaimana jika saya menemukan jenis tajuk ekstensi yang tidak dikenal? Apa yang saya lakukan? Saya tidak tahu panjangnya. Saya kira saya harus membuang paket dan memblokirnya, karena dalam filter bersih yang memungkinkan paket melalui akan memungkinkan penyerang untuk menghindari filter bersih dengan memasukkan jenis header palsu. Tetapi itu berarti bahwa jika protokol tersebut diperpanjang, setiap bagian dari perangkat lunak pengurai header IPv6 yang pernah ditulis harus diperbarui secara bersamaan jika ekstensi baru akan digunakan.
Jadi, bagaimana saya dapat mengurai header IPv6 jika saya tidak mengetahui ekstensi yang mereka gunakan? Bagaimana saya bisa melewati tajuk untuk ekstensi yang tidak diketahui, karena saya tidak tahu panjangnya?