Подключение сетевых функций с помощью драйвера, высокоуровневый обзор?

#c #windows #kernel #driver

#c #Windows #ядро #водитель

Вопрос:

Мне только что удалось написать свой первый драйвер Windows (еще не зарегистрировал его — но мне удалось создать все необходимое!).

Мне было интересно, может ли кто-нибудь дать мне краткий обзор того, как я мог бы достичь следующего:

Я хотел бы написать драйвер, который будет реализовывать определенное поведение при получении сетевого пакета компьютером, прежде чем Windows сделает то, что она делает с пакетом, я хотел бы взять эти данные и вывести их на консоль программы на C или C .

Предположим, у меня есть написанная программа на C / C , у которой есть консоль. Как программа на C / C взаимодействует с драйвером, который я написал, который подключает сетевую активность? Это просто какой-то код на C, который вызывает мои драйверы, функция возвращает данные в виде объекта, а затем я могу использовать этот объект для отображения в консоли?

Заранее благодарим вас за любые возможные ответы

Ответ №1:

Для этой задачи драйвер не нужен. Используйте библиотеку анализатора пакетов, такую как PCap (на самом деле вам понадобится WinPcap). Захватывать пакеты и выводить их на консоль очень просто.

Альтернативный способ — необработанный сокет. Но настольные Windows (в отличие от Windows Server) ограничивают функциональность необработанных сокетов.

Комментарии:

1. Я хотел добраться до пакета раньше, чем это сделает «windows», я заинтересован в высокочастотной торговле, и поэтому я хотел попробовать запрограммировать действительно низкий уровень. Теперь, когда я это сказал, имеет ли смысл все еще писать драйвер?

2. PCap действительно низкоуровневый, потому что он предоставляет драйвер, который вы пытаетесь реализовать, а также интерфейс для приложений пользовательского режима. Зачем делать это снова?

3. Я не понимал, я думал, что winpcap — это оболочка с множеством избыточных функций, которые замедлят работу. Так вы думаете (при условии, что они работают на C или C ), ребята, разрабатывающие торговые платформы HF, тоже будут использовать pcap в Linux, потому что было бы бессмысленно писать драйвер? Или есть какой-то специалист по производительности с помощью драйвера?

4. Да, его можно использовать и в Linux. Да, есть большая разница в производительности при написании собственного драйвера или использовании pcap, но я имею в виду скорость разработки 😉 Вероятно, тот факт, что люди видят сильно загруженные гигабитные сети, использующие PCap, убедит вас, что PCap достаточно хорош. И у него есть бесценная функция — возможность фильтрации. Это очень важно реализовать самостоятельно.

Ответ №2:

Если вам действительно нужен драйвер или требуется обрабатывать или фильтровать пакеты до того, как они попадут в сетевой стек Windows, вам нужно изучить драйверы фильтров.

Затем этот драйвер фильтра может предоставить файл устройства, который затем может быть прочитан / записан вашим приложением пользовательского пространства. DDK Windows содержит примеры.