Я пытаюсь записать в драйвер 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 #, пожалуйста, дайте мне знать.
Спасибо за любую помощь!
Если вы сейчас какие-либо другие решения для отправки сырых пакетов Ethernet в C #
Программа, пожалуйста, дайте мне знать.
Как насчет Разъем учебный класс?
Конструктор:
public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType),
где socketType может принимать следующее значение: SocketType.Raw
Если у вас есть какие-либо другие решения для отправки необработанных пакетов Ethernet в программе на C #, пожалуйста, дайте мне знать.
Вы можете импортировать функции из библиотеки Windows Winsock и использовать SOCK_RAW флаг при создании сокета.
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
Обновление: я только что решил проблему, добавив еще один манифест, чтобы приложение запускалось от имени администратора.
Решение с драйвером NDIS все еще не работало, поэтому я искал другое решение. Я нашел библиотеку SharpPcap. С помощью этой библиотеки я могу изменять пакеты, которые я хочу отправить, например, изменить адрес назначения MAC-адрес.
Спасибо за ваши ответы!