Реализовать Raw Ethernet в Winsock

Я делаю проект, в котором мне нужно создавать собственные пакеты. То есть я должен контролировать заголовок каждого пакета. Я пытаюсь сделать это с помощью сокетов. По сути, мне нужно сделать следующее:

SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type);

Ethernet_type - это что-то настраиваемое, нестандартное, например 0xAAAA. Я использую htons (). Кроме того, для меня очень предпочтительно не использовать winPcap.

Сейчас я получаю ошибку 10043, протокол не поддерживается.

Сообщение об ошибке предполагает, что я могу настроить протокол в своей системе, но я понятия не имею, как это сделать.

Он говорит:

Протокол не поддерживается. Запрошенный протокол не был настроен в системе или для него не существует реализации. Например, вызов сокета запрашивает сокет SOCK_DGRAM, но указывает протокол потока.

Здесь есть несколько разных проблем, поэтому, если у кого-то есть хоть какой-то вклад, я буду очень признателен.


person devin    schedule 22.04.2009    source источник


Ответы (2)


Согласно эти статьи, Microsoft удалила поддержку сырых сокетов из Windows в несъемном исправлении. Так что вам может не повезти, если вы не захотите переключиться на другую ОС.

person Rick Copeland    schedule 22.04.2009
comment
Однако я могу открыть необработанный сокет, используя другие параметры. Также ошибка связана с типом протокола (последний вариант, я назвал его ethernet_type). - person devin; 22.04.2009

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

Создание пользовательских пакетов не требует создания нового протокола.

Я думаю, что правильный способ указания сокета RAW выглядит следующим образом

SOCKET s;
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

Если вы действительно пытаетесь поиграть с необработанным Ethernet, как предполагают ваши имена переменных, то либо вы используете драйвер winpcap, либо пишете собственный драйвер

Я не думаю, что есть еще одно «простое» решение для raw ethernet. winpcap довольно прост, поэтому вы можете проверить его

person Eric    schedule 22.04.2009