Я пишу дуже простий чистий фільтр, і потрапляю туди, де хочу проаналізувати заголовки IPv6, щоб відповідати таким речам, як типи ICMPv6, номери портів TCP / UDP тощо.
Тож я читаю про формат пакету IPv6 поглиблено, і мені начебто ... ну ... мені начебто довелося читати його знову і знову, щоб переконатися, що я насправді читав його правильно. Мені здається, що ви повинні почати з 40-байтового фіксованого заголовка і подивитися на його наступне поле заголовка. Тоді вам слід подивитися на наступне поле заголовка наступного заголовка тощо, як пов’язаний список, поки не досягнете кінця. Якщо є корисна навантаження, вона буде наступною.
Проблема полягає в тому, що немає поля довжини ні в фіксованому заголовку, ні в заголовках розширень. Ви повинні мати таблицю типів заголовків розширень та їх розміри, щоб ви могли переслідувати цей пов'язаний список до кінця.
Це вражає мене як дивний, можливо, навіть заєць, придуманий дизайном. Що робити, якщо я зіткнувся з нерозпізнаним типом заголовка розширення? Що мені робити? Я не знаю його довжини. Я думаю, що мені доведеться викинути пакет і заблокувати його, оскільки в мережевому фільтрі, що дозволяє пакету наскрізь, було б зловмиснику можливість ухилитися від чистого фільтра, включаючи фіктивний тип заголовка. Але це означає, що якщо протокол буде коли-небудь розширений, кожен окремий фрагмент програмного забезпечення для розбору заголовка IPv6, коли-небудь написаний, повинен бути одночасно оновлений, якщо потрібно використовувати нове розширення.
Тож як я можу проаналізувати заголовки IPv6, якщо я не знаю розширень, які вони використовують? Як я можу пропустити заголовок невідомого розширення, оскільки не знаю його довжини?