Я собираюсь использовать Wireshark для мониторинга трафика на моем компьютере с Windows . Во время работы над ним мне было интересно, как Wireshark удается перехватывать сетевые пакеты низкого уровня до того, как это делает Windows .
Прежде всего, сетевой интерфейс моей сетевой карты получает пакет. Затем NIC выполняет некоторые начальные проверки (CRC, правильный MAC-адрес и т. Д.). Предполагая, что проверка прошла успешно, NIC пересылает пакет. Но как и где?
Я понимаю, что драйверы являются связующим звеном между NIC и ОС или любым другим приложением. Я также предполагаю, что есть отдельный драйвер для Windows и Wireshark ( WinPcap ?). В противном случае Wireshark не сможет принимать кадры Ethernet . Существуют ли два или более драйверов NIC одновременно? Как NIC узнает, какой использовать?
источник
Ответы:
Модель ввода / вывода в Windows основана на стеке компонентов. Данные должны проходить через различные компоненты этого стека, который существует между физической сетевой картой и приложением, которое будет использовать данные. Иногда эти различные компоненты проверяют данные (например, пакет TCP), когда они проходят через стек, и на основе содержимого этого пакета данные могут быть изменены или пакет может быть полностью отброшен.
Это упрощенная модель «сетевого стека», через который проходят пакеты, чтобы попасть из приложения в проводную сеть и наоборот.
Одним из наиболее интересных компонентов, показанных на снимке экрана выше, является API-интерфейс WFP (Windows Filtering Platform). Если мы увеличим масштаб, это может выглядеть примерно так:
Разработчики могут свободно вставлять свои собственные модули в соответствующие места в этом стеке. Например, антивирусные продукты обычно используют «драйвер фильтра», который подключается к этой модели и проверяет сетевой трафик или предоставляет возможности брандмауэра. Служба брандмауэра Windows также явно вписывается в эту модель.
Если вы хотите написать приложение, которое записывает сетевой трафик, такой как Wireshark, то соответствующим способом будет использовать собственный драйвер и вставить его в стек как можно ниже, чтобы он мог обнаруживать сетевые пакеты. до того, как у вашего модуля брандмауэра есть шанс отбросить их.
Таким образом, есть много «драйверов», вовлеченных в этот процесс. Много разных типов драйверов тоже. Кроме того, другие формы ввода / вывода в системе, такие как чтение и запись на жестком диске, следуют очень похожим моделям.
Еще одно замечание - выноски WFP - не единственный способ проникнуть в сетевой стек. Например, WinPCap взаимодействует с NDIS напрямую с драйвером, что означает, что у него есть шанс перехватить трафик, прежде чем вообще будет выполнена фильтрация.
Драйверы NDIS
WinPCap
Ссылки:
Стек TCP / IP следующего поколения в Vista +
Архитектура платформы фильтрации Windows
источник
Как говорит Райан Райс:
и это описание в документации WinPcap, как это работает .
источник