Модель вводу / виводу в Windows заснована на купі компонентів. Дані повинні протікати через різні компоненти того стека, який існує між фізичною мережевою картою та програмою, яка споживатиме дані. Іноді ці різні компоненти перевіряють дані (наприклад, пакет TCP), коли вони проходять через стек, і на основі вмісту цього пакету дані можуть бути змінені, або пакет може бути повністю відкинутий.
Це спрощена модель "мережевого стека", через який проходять пакети, щоб потрапити з програми на провід і навпаки.
Один з найцікавіших компонентів, показаних на скріншоті вище, - API WFP (Windows Filtering Platform) Callout. Якщо ми збільшили масштаб на це, це може виглядати приблизно так:
Розробники можуть підключати власні модулі до відповідних місць цього стека. Наприклад, антивірусні продукти зазвичай використовують «драйвер фільтру», який підключається до цієї моделі та перевіряє мережевий трафік або надає можливості брандмауера. Служба брандмауера Windows також очевидно вписується і в цю модель.
Якщо ви хотіли написати програму, яка записує мережевий трафік, наприклад Wireshark, то відповідний спосіб зробити це - використовувати власний драйвер та вставити його в стек якомога нижче, щоб він міг виявляти мережеві пакети. перш ніж ваш модуль брандмауера має можливість скинути їх.
Тож є багато "водіїв", які беруть участь у цьому процесі. Багато різних типів драйверів теж. Крім того, інші форми вводу / виводу в системі, такі як жорсткий диск, що читає і записують, дотримуються дуже подібних моделей.
Ще одне зауваження - опис WFP - не єдиний спосіб інсценувати себе в мережевий стек. Наприклад, WinPCap взаємодіє з NDIS безпосередньо з драйвером, це означає, що він має шанс перехопити трафік, перш ніж будь-яка фільтрація відбулася.
Драйвери NDIS
WinPCap
Список літератури:
TCP / IP стека нового покоління у Vista +
Архітектура платформи фільтрування Windows