2009-12-22 7 views
0

Есть ли способ управлять данными, поступающими из Интернета с определенного адреса через сетевую карту, прежде чем он получит ядро ​​операционной системы с использованием C++ или любого языка?Доступ к данным, проходящим через сетевую карту с использованием C++

В другом слове Есть ли способ получить доступ к семимерной модели OSI с использованием C++ для управления данными, проходящими через любой слой из семи слоев или они только логически реализованы.

В случае, если они не реализованы логически и вы можете получить доступ Я хочу получить доступ к пакетам, передающим физический уровень, который получен с определенного адреса, и выполнить некоторую операцию до перехода на следующий уровень.

также есть ли программное обеспечение для моделирования для OSI ?.

+0

Возможно, это поможет упомянуть операционную систему, на которую вы хотите это сделать;) –

ответ

4

Драйвер устройства - это то, что находится между аппаратным обеспечением и ядром, поэтому это ваш единственный выбор. Это зависит от ОС, но можно написать драйвер устройства на C++ для всех основных. Будьте готовы встретить простой интерфейс C, хотя.

+0

OP будет нуждаться в модуле ядра, что это правильный ответ. –

+0

также, реализация будет сильно различаться в зависимости от ОС. на каждой платформе не будет единой реализации. –

2

Вы спрашиваете, может ли ненадежное приложение контролировать то, что видит операционная система, поступающее из сети?

Ответ должен быть очевиден.

Большинство операционных систем предоставляют интерфейсы для доступа к исходным данным, выходящим из сети, и вы должны использовать их, а не пытаться вклиниться между сетевой картой и операционной системой.

Также, C++! = C#. Даже не близко.

2

Возможно, вы можете создать многоуровневого поставщика услуг, который может перехватывать данные, вставляя себя в стек winsock, но это не приведет к короткому замыканию данных, проходящих через ядро, и слоя NDIS в окнах. Единственным реальным решением здесь будет драйвер устройства. Кроме того, есть некоторые сетевые карты, которые реализуют свой собственный стек TCP/IP на аппаратном уровне, и вы можете общаться с ними напрямую, но это не очень распространено. Любой из этих подходов не является тривиальным, и вы смотрите на много режима ядра C. Если вам это не нравится, вы не должны пытаться это делать.

Вы также можете рассмотреть возможность использования winpcap, поскольку это даст вам много необходимых функций. http://www.winpcap.org/devel.htm

+0

+1 для winpcap; есть также libpcap (из которого winpcap - это порт) для Unix/Linux. Это доставит вам пакеты с проводов, но они все равно передаются непосредственно в стек IP. Я не знаю, есть ли способ использовать pcap для intercapt пакетов, изменять их, а затем передавать их в стек, что и похоже на то, что хочет OP. – ceo

Смежные вопросы