C ++ Создать дескриптор для драйвера NdisProt - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь записать в драйвер NdisProt и отправить необработанные пакеты Ethernet. Я импортировал несколько команд C ++ в свою программу на C #, чтобы получить доступ к драйверу. Когда я пытаюсь открыть дескриптор водителю, я всегда получаю неверный дескриптор. Я уже пробовал это только с «NdisProt» в качестве пути, но это не решило. Есть ли у вас какие-либо предложения, почему я получаю неверный дескриптор?

private bool OpenDriver()
{
    // User the CreateFile API to open a handle to the file
    this.m_iHandle = CreateFile("\\\\.\\NdisProt,
    GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

    // Check to see if we got a valid handle
    if ((int)m_iHandle <= 0)
    {
        // If not, then return false and reset the handle to 0
        this.m_iHandle = IntPtr.Zero;
        return false;
    }

Если у вас есть какие-либо другие решения для отправки необработанных пакетов Ethernet в программе на C #, пожалуйста, сообщите мне.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Если у вас есть другие решения для отправки необработанных пакетов Ethernet в программе на C #, пожалуйста, сообщите мне.

Вы можете импортировать функции из библиотеки Windows Winsock и использовать SOCK_RAW флаг при создании сокета.

int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
0 голосов
/ 31 августа 2018

Обновление: я только что решил проблему, добавив еще один манифест, чтобы приложение запускалось от имени администратора.

Решение с драйвером NDIS все еще не работало, поэтому я искал другое решение. Я нашел библиотеку SharpPcap. С помощью этой библиотеки я могу изменять пакеты, которые я хочу отправить, например, изменить MAC-адрес получателя.

Спасибо за ваши ответы!

0 голосов
/ 27 августа 2018

Если у вас сейчас есть другие решения для отправки необработанных пакетов Ethernet в C # Программа, пожалуйста, дайте мне знать.

А как насчет сокета класса?

Конструктор:

public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType),

где socketType может принимать следующее значение: SocketType.Raw

...